Laravel Livewire数据存储报错:Attempt to read property 'name' on array咨询
解决Laravel Livewire中「Attempt to read property 'name' on array」报错问题
错误原因分析
- Livewire的
$this->validate()方法返回的是关联数组,而非对象,你使用$validatedData->name这种对象属性访问语法,会导致对数组使用属性访问的错误。 - 定义
$store数组时,元素结尾误用了分号;,这是PHP数组语法错误,元素间需用逗号,分隔。
修复后的Livewire代码
public $name; public $email; public $date_of_join; public function submit() { $validatedData = $this->validate([ 'name' => 'required', 'email' => 'required', 'date_of_join' => 'required', ]); $store = [ 'name' => ucwords(strtolower($validatedData['name'])), 'email' => $validatedData['email'], 'date_of_join' => date("Y-m-d", strtotime($validatedData['date_of_join'])) ]; User::create($store); }
额外优化建议
由于你已经在组件中声明了$name、$email、$date_of_join公共属性,验证通过后可以直接使用这些属性构建存储数组,代码更简洁:
public function submit() { $this->validate([ 'name' => 'required', 'email' => 'required', 'date_of_join' => 'required', ]); $store = [ 'name' => ucwords(strtolower($this->name)), 'email' => $this->email, 'date_of_join' => date("Y-m-d", strtotime($this->date_of_join)) ]; User::create($store); }
内容的提问来源于stack exchange,提问作者user12931578
相关产品推荐
相关产品推荐

