[英]laravel request validation on updating of data
我有更新數據的請求驗證
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
要解決此問題,我們需要先了解錯誤:
響應內容必須是實現 __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);
因為我們希望在驗證錯誤時拋出異常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.