2016-09-05 46 views
2

必須有一個非常簡單的解決方案,但我不知道如何在谷歌或Stackoverflow中搜索這個問題,所以,迄今爲止我沒有找到任何東西。Laravel:忽略412錯誤頁面

我已經寫在鹿門一個簡單的API路由返回一個包含驗證421 JSON字符串失敗:

{ "code": 412, "status": "error", "data": "validation failed" } 

現在我想調用另一個Laravel項目這條路線,但隨後而不是JSON的從API字符串,我得到一個巨大的錯誤頁面俗話說:

Client error: POST http://www.serellyn.net/development/game_api/public/platforms

導致了412 Precondition Failed響應:

{"code":412,"status":"error","data":"validation failed"} 

我認爲這是非常正常的行爲,因爲Laravel在響應中看到錯誤。但我想要做的就是接收我自己的帶有412錯誤代碼的json字符串,並且能夠繼續使用我的網頁。

我該如何解決這個問題? 預先感謝您。

編輯:忘了補充一些代碼。我使用Guzzle來調用我的API。

$client = new Client(['base_uri' => 'http://www.serellyn.net/development/game_api/public/', 'auth' => array('dev', '<dev>2016')]); 
     $res = $client->request('POST', 'platforms', array('form_params' => ['name' => $request->name])); 
     if($res->getStatusCode() == 201) { 
      Session::flash('success', $request->name . ' successfully added'); 
     } else { 

     } 
     return redirect()->route('platforms.add.get'); 
+0

您可以發佈您使用調用API的代碼? –

+0

@AmirBar,對不起。我想在第一個地方添加它,我忘了:) – Serellyn

+0

@AmirBar檢查我的編輯:) – Serellyn

回答

1

我認爲答案是正確的。我會做的是捕獲try-catch塊中的錯誤,然後繼續我的想法。

+0

但是,我不能使用我在我的JSON返回,對不對?因爲API執行驗證,所以如果驗證失敗,我想知道哪些驗證失敗,並且在我的API中處理,然後在JSON中返回。 – Serellyn

+1

當然可以。您應該將錯誤消息與錯誤一起發送。在try-catch中,從異常中獲取錯誤消息,您可以找出失敗的原因。 –

0

問題是,如果http_errors請求選項設置爲true,那麼Guzzle會拋出400級錯誤的異常。 (這是默認值)

你需要把'http_errors' => false像請求:

$client->request('POST', 'platforms', array('http_errors' => false,'form_params' => ['name' => $request->name])); if($res->getStatusCode() == 201) { 

http_errors docs