2017-01-17 82 views
1

我正在創建一個用於從移動應用上傳文件的簡單API。API - 驗證Laravel中的請求

在我routes/api.php文件我有一個路線定義:

Route::post("/file", '[email protected]'); 

然後在我的控制器我驗證請求:

public function upload(Request $request){ 

    $this->validate($request, [ 
      'name' => 'required', 
      'file' => 'file', 
      'type' => 'required|in:sign,photo', 
     ]); 

    // do something here.... 

} 

當請求是正確的(它通過驗證)一切正常罰款和Laravel返回JSON響應。

但是,如果請求未通過驗證,即缺少name字段,則Laravel返回302頁並嘗試將我重定向到登錄頁面。

當驗證失敗而不是302重定向頁面時,如何使用JSON消息返回適當的40X/50X錯誤?

我使用Laravel 5.3和Insomnia來測試API調用。

回答

3

validate方法爲普通請求返回重定向,爲AJAX請求返回JSON。

驗證方法接受傳入的HTTP請求和一組驗證規則。如果驗證規則通過,您的代碼將繼續正常執行;但是,如果驗證失敗,則會拋出異常並將正確的錯誤響應自動發回給用戶。在傳統HTTP請求的情況下,將生成重定向響應,而AJAX請求將發送JSON響應。

所以,你有幾種選擇,這裏有一對夫婦:

  • 可以設置成Laravel認爲這是一個AJAX請求
  • 您可以創建您的驗證,並在其上調用fails()X-Requested-With頭並處理你的迴應,你所希望的方式來:

$validator = Validator::make($input, $rules); 
if ($validator->fails()) { 
    // Custom Response 
} 

如果您只是製作一個API,您可能需要考慮使用Lumen,因爲它可以針對特定目的進行更精細的調整。另外,它的驗證defaults to returning a JSON response

+2

謝謝,X-Requested-與訣竅。但是,從Insomnia發出的請求沒有被正確識別爲AJAX請求,這有點奇怪。 – Gacek