2015-09-13 26 views
12

我试图将值发布到验证中,并将响应作为json而非文档中给​​出的return view返回。Laravel 5验证 - 以json/ajax的形式返回

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

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

该帖子由ajax制作,所以我需要在ajax中接收响应。

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

+1

'返回响应() - > JSON([ '错误'=>用$ validator->消息(), '状态'=> 400] ,200);'? – aldrin27

+2

小更新:现在的REST原则需要使用状态码“422”。 – Peon

回答

18

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

if ($validator->fails()) {  
    return response()->json($validator->messages(), 200); 
} 
+0

您不必指定200 error_code,因为200是默认值。 –

+0

嗯。我认为我们应该设置状态代码,而不是200,201。如果客户端使用'axios'(Javascript API库)来处理承诺,会发生什么情况:D – dphans

+1

如果失败,您应该返回一个'400',因为它确实不成功。您还应该考虑使用响应代码常量,例如'Response :: HTTP_BAD_REQUEST'。一个完整的例子是:'return response() - > json($ validator-> messages(),Response :: HTTP_BAD_REQUEST);' –

1

5.4 Laravel的validate()方法可以自动检测,并相应地发送验证响应。

参见如果验证失败,重定向响应,将产生用户发送回他们以前的位置的文档here

。错误也会闪现到会话中,以便显示。如果该请求是AJAX请求,则具有422状态码的HTTP响应将返回给用户,包括验证错误的JSON表示。

所以,你可以简单地做到以下几点:

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