Laravel 4 - 如何回报所有验证错误信息所有字段的JSON结构?

mtm*_*ald 18 php laravel laravel-4

我正在从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
Run Code Online (Sandbox Code Playgroud)

但在Laravel 4中,错误消息受到保护:

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

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)
Run Code Online (Sandbox Code Playgroud)

json_encode($ validation-> messages)返回

{}
Run Code Online (Sandbox Code Playgroud)

问题:如何在Laravel 4中将所有字段的所有验证错误消息作为JSON结构返回?

And*_*yco 58

简单地使用toJson()方法.

return $validator->messages()->toJson();
Run Code Online (Sandbox Code Playgroud)


Eli*_*iss 16

这是让你在响应中添加HTTP代码的另一种方法:

return Response::json($validation->messages(), 500);
Run Code Online (Sandbox Code Playgroud)

  • 这可能应该使用`400请求因语法错误而不是'500服务器错误'而无法实现.因为这可能是客户端而不是服务器错误. (5认同)

mtm*_*ald 11

我发现可以使用toArray()方法:

return json_encode($validation->messages()->toArray()); 
Run Code Online (Sandbox Code Playgroud)