Как обойти обработку исключений 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 Documentation .
Вместо вашего кода
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