簡體   English   中英

laravel 請求驗證數據更新

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM