Как обойти обработку исключений 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