Как обойти обработку исключений Laravel

у меня есть метод, который проверяет, имеет ли пользователь действительную информацию о сеансе. Это должно вызвать исключение, GuzzleHttpExceptionBadResponseException но когда я пытаюсь поймать его :

catch (GuzzleHttpExceptionBadResponseException $e) 
{
    return false;
} 
return true

Laravel не попадает в этот код и сразу же запускает собственную обработку ошибок. И идеи о том, как обойти собственную реализацию Laravels и использовать собственный улов.

EDIT: я только что узнал, что Laravel использует тот же обработчик исключений, что и Symfony, поэтому я также добавил тег Symfony2.

редактирование 2:

Я вроде исправил проблему, отключив исключения Guzzle и проверив заголовок возврата вручную. Это немного короткий путь, но в этом случае он делает свою работу. Спасибо за ответы!

3 ответов


на самом деле это исключение может быть поймано в Laravel, вам просто нужно уважать (и понимать) пространство имен:

если у вас

namespace App;

и вы

catch (Guzzle\Http\Exception\BadResponseException $e) 

PHP понимает, что вы пытаетесь

catch (\App\Guzzle\Http\Exception\BadResponseException $e) 

Итак, для его работы вам просто нужна корневая косая черта:

catch (\Guzzle\Http\Exception\BadResponseException $e) 

и это будет работать.


по умолчанию app/start/global.php файл содержит обработчик ошибок для всех исключений. Однако при необходимости можно указать дополнительные обработчики. Обработчики вызываются на основе type-hint исключения они работают. Например, вы можете создать обработчик, который обрабатывает только ваш BadResponseException экземпляров, как

App::error(function(Guzzle\Http\Exception\BadResponseException $exception)
{
    // Handle the exception...
    return Response::make('Error! ' . $exception->getCode());
});

кроме того, убедитесь, что у вас есть хорошо определенный (BadResponseException класс). Подробнее на Документация Фреймворк Laravel.


вместо кода

catch (Guzzle\Http\Exception\BadResponseException $e) 
{
   return false;
} 
return true

используйте это решение

catch (\Exception $e) 
{
   return false;
} 
return true

ловить все возможные исключения жрут.

Если вы явно хотите поймать BadResponseException вы также можете добавить пространство имен класса вашего исключения с помощью '\'.

catch (\Guzzle\Http\Exception\BadResponseException $e) 
{
   return false;
} 
return true