Laravel 5验证 - 以json/ajax身份返回

sen*_*nty 22 javascript php jquery laravel laravel-5

我试图将值发布到验证中并将响应作为json返回,而不是return view在文档中给出.

    $validator = Validator::make($request->all(), [
        'about' => 'min:1'
    ]);

    if ($validator->fails()) {
        return response()->json(['errors' => ?, 'status' => 400], 200);
    } 
Run Code Online (Sandbox Code Playgroud)

帖子是由ajax制作的,所以我也需要在ajax中收到回复.

我发现为了防止在返回的响应中刷新页面,我必须在数组外给它一个200的状态代码.但我无法弄清楚要给这个'errors'部分什么.我应该在那里写什么?

Pey*_*n.H 34

您可以使用$validator->messages()它返回一个数组,其中包含有关验证程序的所有信息,包括错误.该json函数接受数组并将其编码为json字符串.

if ($validator->fails()) {    
    return response()->json($validator->messages(), 200);
}
Run Code Online (Sandbox Code Playgroud)

  • 如果失败了,你应该返回一个'400`,因为它没有成功.您还应该考虑使用响应代码常量,例如`Response :: HTTP_BAD_REQUEST`.一个完整的例子是:`return response() - > json($ validator-> messages(),Response :: HTTP_BAD_REQUEST);` (6认同)

Gja*_*jaa 9

你也可以告诉 Laravel 你想要一个 JSON 响应。将此标头添加到您的请求中:

'Accept: application/json'
Run Code Online (Sandbox Code Playgroud)

Laravel 会返回一个 JSON 响应。


Jon*_*s03 7

在Laravel 5.4中,该validate()方法可以自动检测您的请求是否为AJAX请求,并相应地发送验证程序响应。

请参阅此处的文档

如果验证失败,将生成重定向响应以将用户发送回其先前的位置。错误还将闪现到会话中,因此可以显示。如果请求是AJAX请求,则将向用户返回带有422状态代码的HTTP响应,其中包括验证错误的JSON表示形式。

因此,您可以简单地执行以下操作:

Validator::make($request->all(), [
    'about' => 'min:1'
])->validate();
Run Code Online (Sandbox Code Playgroud)