2017-07-31 20 views
1

私はLaravel 5.4認証プロセスを使用してAJAXベースのログインを実装しています。Laravel検証応答AJAX経由

AuthenticatesUsers形質法より優先されている(私は422回答を得続けるので、いくつかの研究の後、私は私のLoginControllerでこの検証方法を思い付いた:

protected function validateLogin(Request $request) 
{ 
    $validator = Validator::make($request->all(), [ 
     $this->username() => 'required|email|max:50|unique:users', 
     'nickname' => 'required|max:30|min:6|unique:users', 
     'password' => 'required|confirmed|min:6', 
    ]); 

    if ($validator->fails()) { 

     $responseBag = $validator->getMessageBag()->toArray(); 
     $responseBag['type'] = ['error']; 

     if($request->ajax()) { 
      return response()->json($responseBag, 422); 
     } 

     $this->throwValidationException(
      $request, $validator 
     ); 

    } 
} 

を、私はこの応答を期待しています:

array:3 [ 
    "nickname" => array:1 [ 
    0 => "The nickname field is required." 
    ] 
    "password" => array:1 [ 
    0 => "The password confirmation does not match." 
    ] 
    "type" => array:1 [ 
    0 => "error" 
    ] 
] 

しかし、私はこの応答を受け取ります。

応答の前にI dd($messageBag)を入力すると、予期した結果が得られます。私は何が欠けていますか?

答えて

1

LoginController:loginのメソッド定義を見ると、$this->validateLoginは返されません。

$this->validateは、要求の検証が失敗した場合にAJAXおよび通常の要求に応じて処理される例外をスローします。

あなたの検証を記述する必要がありますように:

protected function validateLogin(Request $request) 
{ 
    $this->validate($request, [ 
     $this->username() => 'required|email|max:50|unique:users', 
     'nickname' => 'required|max:30|min:6|unique:users', 
     'password' => 'required|confirmed|min:6', 
    ]); 
} 

}

+0

こんにちは、返信いただきありがとうございます。 'if'ステートメントの前に' dd($ request-> ajax()) 'を実行するとtrueを返します。 'if'ステートメントの中に' dd'を置くと、それがトリガーされるので、 'return JSON'ステートメントに到達しています。また、 '$ .ajax'関数で' post'に 'jQuery'(V3、最新)を使っています。これは以前のところ働いていました。 LaravelのバージョンはOKです。 – TheRealPapa

+0

@TheRealPapaありがとうございます。更新された回答をご覧ください。 –