将Laravel验证错误作为JSON响应返回

时间:2018-05-29 14:00:05

标签: php laravel validation

在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',
    ]);        
}

3 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

你可以通过将错误返回为json respone来解决它

$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 :(得分:0)

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