【问题标题】:Return Laravel validation errors as JSON response将 Laravel 验证错误作为 JSON 响应返回
【发布时间】:2018-05-30 03:09:05
【问题描述】:

在 Laravel 的 RegisterController 中,我无法将错误返回到我的前端。我们的应用程序是作为 REST API 构建的,因此新用户的注册是通过 AJAX 发布到注册路由的。如果验证通过,这可以正常工作,但如果验证失败,则不会显示错误。它只是重定向到 Laravel 主页。我们没有将 Blade 用于前端,因此无法从 Blade 获取默认验证错误。前端是一个 ReactJS 客户端,通过 AJAX 调用与后端通信。

如何获取包含未通过验证的字段的 JSON?

protected function validator(array $data)
{
    return Validator::make($data, [
        'first_name' => 'required|string|max:255',
        'last_name'  => 'required|string|max:255',
        'email'      => 'required|string|email|max:255|unique:users',
        'password'   => 'required|string|min:6|confirmed',
        'birth_year' => 'required|integer|min:4',
        'lat'        => 'required|numeric',
        'lon'        => 'required|numeric',
    ]);        
}

【问题讨论】:

    标签: php laravel validation


    【解决方案1】:

    您可以通过将错误返回为 json 响应来解决它

    $validator = Validator::make($data, [
        'first_name' => 'required|string|max:255',
        'last_name'  => 'required|string|max:255',
        'email'      => 'required|string|email|max:255|unique:users',
        'password'   => 'required|string|min:6|confirmed',
        'birth_year' => 'required|integer|min:4',
        'lat'        => 'required|numeric',
        'lon'        => 'required|numeric',
    ]);        
    
    if ($validator->fails()) {    
      return response()->json($validator->messages(), 200);
    }
    

    【讨论】:

      【解决方案2】:

      您的代码很好,您可以捕获错误,因为 laravel 会自动返回一个带有 422 HTTP 状态的 JSON 响应。

      所以基本上在你的 ajax 中使用错误函数,如果验证器失败,ajax 会自动从 ajax 执行你在错误中的代码。

      有关如何正确处理 ajax 错误的更多信息,请查看此问题。 Displaying validation errors in Laravel 5 with React.js and AJAX

      【讨论】:

        【解决方案3】:

        我通过禁用RegisterController 中的“guest”中间件解决了这个问题。我不确定这是否是一个可靠的解决方案,但现在它可以工作。

        【讨论】:

        • 所以如果你不禁用'guest'中间件验证器不会自动返回一个422的http响应,你的ajax应该捕捉到它吗?如果解决方案是禁用与验证无关的中间件,那真的很奇怪?
        • 确实很奇怪,但我认为这与来自中间件的一些重定向有关
        猜你喜欢
        • 2022-10-18
        • 2021-01-24
        • 2016-11-18
        • 2017-03-29
        • 1970-01-01
        • 2020-02-09
        • 1970-01-01
        • 2015-12-09
        • 2017-12-11
        相关资源
        最近更新 更多