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 回答