2015-09-13 35 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();