我有我的数据更新请求确认
public function rules()
{
return [
'name' => 'required|string|max:255',
'email' = 'required|string|email|max:255|unique:users,email,'.$this->id,
'password' => 'min:6',
];
}
这是我的控制器
public function update(UpdateUserInfo $request, $id){
$user = User::findOrFail($id);
$user->name = $request->input('name');
$user->email = $request->input('email');
$user->role_id = 2;
if($request->input('password')){
$user->password = Hash::make($request->input('password'));
}
return $user->save() ?: new UsersResource($user);
}
但是我有一个错误,说The Response content must be a string or object implementing __toString(), "boolean" given.
在我进行验证之前,是在控制器本身上
public function update(Request $request, $id)
{
$this->validate($request, [
'name' => 'required|string|max:255',
'email' => 'required|string|email|max:255|unique:users,email,'.$id,
'password' => 'min:6',
]);
$user = User::findOrFail($id);
$user->name = $request->input('name');
$user->email = $request->input('email');
$user->role_id = 2;
if($request->input('password')){
$user->password = Hash::make($request->input('password'));
}
if($user->save()){
return new UserResource($user);
}
}
,它工作正常。现在,我只想将验证与控制器分开。
我认为问题在于电子邮件的验证
'email' = 'required|string|email|max:255|unique:users,email,'.$this->id,
但是我不知道如何通过更新方法传递ID
答案 0 :(得分:1)
要解决此问题,我们需要首先了解该错误:
响应内容必须是实现的字符串或对象 __toString(),给出“布尔值”。
这表明问题出在控制器的响应(返回)上。
由于$user->save()
成功返回true
,所以此行会导致更新成功时控制器返回布尔值,而Laravel期望string or object implementing __toString()
:
return $user->save() ?: new UsersResource($user);
因此,您可以尝试解决此问题的方法是简单地恢复以前的返回值(您可以保留其余代码):
if($user->save()){
return new UserResource($user);
}
或者简单地:
$user->save();
return new UserResource($user);
因为我们希望验证错误会引发异常。