【问题标题】:Laravel 4 - how to return all validation error messages for all fields as a JSON structure?Laravel 4 - 如何将所有字段的所有验证错误消息作为 JSON 结构返回?
【发布时间】:2013-10-25 16:18:49
【问题描述】:

我正在从 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 结构返回?

【问题讨论】:

  • 在编码之前你有没有尝试过将类型转换为数组?不确定它是否有效但值得一试:$messages = (array)$validation->messages; return json_encode($messages);
  • @FDL - 谢谢。您的评论让我找到了一个可行的答案(messageBag 类有一个 toArray() 方法。

标签: php laravel laravel-4


【解决方案1】:

我认为这是 Laravel 获取错误消息的方式。有特殊的方法可以得到它们。所以这里我是如何做这些事情的:

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

这会产生以下格式的输出:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 太棒了! HTTP 响应代码应该是 AJAX 验证的必要条件,即
    • 这应该使用400 request cannot be fulfilled due to bad syntax 而不是500 server error。因为这可能是客户端而不是服务器错误。
    【解决方案3】:

    只需使用toJson() 方法。

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

    【讨论】:

      【解决方案4】:

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

      return json_encode($validation->messages()->toArray()); 
      

      【讨论】:

        猜你喜欢
        • 2015-11-10
        • 1970-01-01
        • 2018-12-19
        • 1970-01-01
        • 1970-01-01
        • 2020-01-23
        • 2022-11-25
        • 1970-01-01
        • 2011-10-22
        相关资源
        最近更新 更多