Livewire表单提交出现Unable to resolve dependency [ $city ]错误如何解决
错误原因
- 你在Livewire组件的
test方法中声明了必填入参$city,但前端表单提交调用test方法时没有传递任何参数,Livewire尝试解析方法依赖时找不到$city对应的值,因此抛出该错误。 - 你的输入框已经绑定了
wire:model.defer="city",而$city是组件的公共属性,表单提交时Livewire会自动把输入框的值同步到组件的$city属性,完全不需要通过方法入参传递。
修复方案
- 第一步:修改
test方法,去掉入参$city,直接调用类的公共属性即可:
public function test() { $this->apiKey = config('services.openweather.key'); $this->getWeatherByCity(); }
- 第二步(可选,解决潜在异常):补充类属性声明,修正属性名拼写不一致问题。你代码中开头定义的属性是
$currentWeatherRes、$forecastWeatherRes,后续赋值用的是后缀为Resp的属性名,同时用到了未声明的$apiKey属性,调整后的类属性定义如下:
class WeatherInfo extends Component { public $city; // 补充缺失的属性声明,统一属性名拼写 private $apiKey; private $currentWeatherResp; private $forecastWeatherResp; private $unit; // 其余原有代码保持不变 }
- 第三步(可选,适配你的需求):如果你预期是通过
updatedCity生命周期钩子自动更新城市,无需额外绑定提交按钮,可添加如下代码,城市输入框内容变化时会自动触发查询:
// Livewire自带的属性更新监听钩子,$city属性更新后自动执行 public function updatedCity() { $this->getWeatherByCity(); }
内容的提问来源于stack exchange,提问作者OsG
相关产品推荐
相关产品推荐

