Php Laravel 4-如何以JSON结构返回所有字段的所有验证错误消息?

Php Laravel 4-如何以JSON结构返回所有字段的所有验证错误消息?,php,laravel,laravel-4,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($v

我正在从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\u 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\u encode($validation->messages)返回

{}

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

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

return json_encode($validation->messages()->toArray()); 
只需使用
toJson()
方法

return $validator->messages()->toJson();

下面是另一种让您向响应添加HTTP代码的方法:

return Response::json($validation->messages(), 500);

我认为这是获取错误消息的最有效的方法。有一些特殊的方法可以得到它们。我是怎么做的:

return Response::json($validator->errors()->getMessages(), 400);
这将生成以下格式的输出:

{
"field_name": [
     "Error message"
     ]
}

在编码之前,您是否尝试过将类型转换为数组?不确定它是否有效,但值得一试:
$messages=(数组)$validation->messages;返回json_encode($messages)@FDL-谢谢。您的评论让我找到了一个有效的答案(messageBag类有一个toArray()方法。太棒了!HTTP响应代码应该是AJAX验证的必备代码。这可能应该使用400请求,因为语法错误而不是500服务器错误。因为这可能是客户端错误,而不是服务器错误。