2017-05-04 10 views
0

중단 기능을 사용하여 서비스 레이어에서 맞춤 예외 메시지를 보내고 있습니다.Laravel - 맞춤 중단 메시지 수신

if($max_users < $client->users()->count()){ 
    return abort(401, "Max User Limit Exceeded"); 
} 

하지만 어떻게 다른 응용 프로그램 위의 코드는 메시지에 대해 다음 인쇄

try{ 

    $clientRequest = $client->request(
     'POST', 
     "api/saveClientDetails", 
     [ 
      'headers' => [ 
       'accept' => 'application/json', 
       'authorization' => 'Bearer ' . $user['tokens']->access_token 
      ], 
      'form_params' => $data, 
     ] 
    ); 

} catch (\GuzzleHttp\Exception\ClientException $clientException){ 

    switch($clientException->getCode()){ 
     case 401:  
      \Log::info($clientException->getCode()); 
      \Log::info($clientException->getMessage()); 

      abort(401); 
      break; 
     default: 
      abort(500); 
      break; 
    } 

} 

에 내 컨트롤러에서이 메시지를 잡을 않습니다

을하지만

를 인쇄
Client error: `POST http://project-service.dev/api/saveClientDetails` resulted in a `401 Unauthorized` response: 
<!DOCTYPE html> 
<html> 
    <head> 
     <meta charset="UTF-8" /> 
     <meta name="robots" content="noindex,nofollow (truncated...) 

답변

1

글쎄, 당신이 있어야 할 때 대신 Guzzle Exception을 잡으려고합니다. 심포니 HttpException 잡기. 어쩌면이 같은 시도 :

public function test() 
{ 
    try 
    { 
     $this->doAbort(); 
    } 
    catch (\Symfony\Component\HttpKernel\Exception\HttpException $e) 
    { 
     dd($e->getStatusCode(), $e->getMessage()); 
    } 
} 

public function doAbort() 
{ 
    abort(401, 'custom error message'); 
} 

출력은 다음과 같습니다 : 귀하의 의견을 바탕으로

401 
"custom error message" 

, 여기에 어떻게있어

catch(\Symfony\Component\HttpKernel\Exception\HttpException $e) 
{ 
    \Log::info($e->getMessage()); 
} 

의견을 바탕를, 나는 다음과 같은 시도 나를 위해 일합니다.

Route::get('api', function() { 

    return response()->json([ 
     'success' => false, 
     'message' => 'An error occured' 
    ], 401); 

}); 

Route::get('test', function() { 

    $client = new \GuzzleHttp\Client(); 

    try 
    { 
     $client->request('GET', 'http://app.local/api'); 
    } 
    catch (\Exception $e) 
    { 
     $response = $e->getResponse(); 
     dd($response->getStatusCode(), (string) $response->getBody()); 
    } 

}); 

이렇게하면 상태 코드와 올바른 오류 메시지가 출력됩니다. abort을 사용하는 경우에도 전체 HTML 응답을 반환합니다. 보다 나은 접근법은 잘 형식화 된 JSON 응답을 반환하는 것입니다.

지금 작동하는지 알려주세요. :)

+0

이 예외는 발견되지 않았습니다. – fractal5

+0

내 대답을 수정했습니다. – Mozammil

+0

테스트 중단 함수를 작성하여 동일한 작업을 시도했습니다. 그러나 이제는 매우 이상한 예외 (일반, 대머리 또는 심포니)가 발생하지 않습니다. – fractal5