18

Laravel 3 から Laravel 4 にアップグレードしています。私のアプリには、クライアント側でレンダリングされる AJAX のみのフォームがいくつかあります (つまり、サーバー側のビューはありません)。したがって、withErrors()メソッドを使用して検証エラーをビューに渡す代わりに、検証エラー オブジェクトを JSON 構造としてクライアントに返しています。

Laravel 3では、これがありました:

$validation = Validator::make(Input::all(), $rules);
if($validation->fails())
{
  return json_encode($validation->errors);
}
//else handle task

しかし、Laravel 4 では、エラー メッセージは保護されています。

$validation = Validator::make(Input::all(), $rules);
if($validation->fails())
{
  var_dump($validation->messages());
  return json_encode($validation->messages());
}
//else handle task

var_dump($validation->messages())は以下を返します:

object(Illuminate\Support\MessageBag)[333]
  protected 'messages' => 
    array (size=1)
      'delete_confirm_password' => 
        array (size=1)
          0 => string 'The delete confirm password field is required.' (length=46)
  protected 'format' => string ':message' (length=8)

json_encode($validation->messages)が返す

{}

質問: Laravel 4 ですべてのフィールドのすべての検証エラー メッセージを JSON 構造として返すにはどうすればよいですか?

4

4 に答える 4

58

toJson()メソッドを使用するだけです。

return $validator->messages()->toJson();
于 2013-10-17T10:42:33.833 に答える
16

応答に HTTP コードを追加する別の方法を次に示します。

return Response::json($validation->messages(), 500);
于 2014-02-05T10:44:30.177 に答える
11

toArray()メソッドを使用できることがわかりました。

return json_encode($validation->messages()->toArray()); 
于 2013-10-17T09:11:33.383 に答える
3

これがエラーメッセージを取得するLaravelの方法だと思います。それらを取得するための特別な方法があります。だからここで私はこのことを行う方法:

return Response::json($validator->errors()->getMessages(), 400);

これにより、次の形式で出力が生成されます。

{
"field_name": [
     "Error message"
     ]
}
于 2014-11-21T03:22:50.577 に答える