У меня есть метод, который проверяет, имеет ли пользователь действительную информацию сеанса. Это должно Guzzle\Http\Exception\BadResponseException
исключение, исключение Guzzle\Http\Exception\BadResponseException
но когда я пытаюсь его поймать:
catch (Guzzle\Http\Exception\BadResponseException $e) { return false; } return true
Laravel не добирается до этого кода и сразу же начинает свою собственную обработку ошибок. И идеи о том, как обойти Laravels собственную реализацию и использовать мой собственный Catch.
EDIT: Я только что узнал, что Laravel использует тот же обработчик Exception, что и Symfony, поэтому я также добавил тег Symfony2.
EDIT 2:
Я как бы устранил проблему, отключив исключения Guzzle и проверив заголовок возврата вручную. Это немного короткое сокращение, но в этом случае он выполняет эту работу. Спасибо за ответы!
На самом деле это исключение можно найти в 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