Обработка исключений Laravel: исключение с & quot; неправильно & quot; учебный класс

Я использую одно Закрытие для обработки исключений в моем приложении:

App::error(function(Exception $exception, $code)
{
if (is_a($exception, 'MsgException')) {
...
return;
}
dd($exception); // debugging
});

Странно то, что если я брошу MsgException

<?php use MsgException; // alias for ExampleNamespace\MsgException

...
throw new MsgException();

…который является пользовательским классом …

<?php namespace ExampleNamespace;

use RuntimeException;

class MsgException extends RuntimeException {}

is_a($exception) является false а также dd($exception) говорит, что это ErrorException,

Я понятия не имею, почему это происходит. Любые предложения или идеи, как я могу отладить свое приложение?

0

Решение

Не используйте общий обработчик исключений для обработки других типов исключений. Зарегистрируй свой.

App::error(function(ExampleNamespace\MsgException $exception, $code)
{
dd($exception); // debugging
});

Подробнее о App::error доступны Вот.

1

Другие решения

Ну, короткий ответ довольно прост: он не работает, потому что исключение выбрасывается внутри представления.
Вы можете проверить это, просто добавив

throw new \RuntimeException('Test');

к методу контроллера или замыканию маршрутизации или в любом месте за пределами представления и путем добавления

<?php throw new \RuntimeException('Test'); ?>

в шаблон просмотра. Laravel покажет первый как RuntimeException а второй как ErrorException,

К сожалению, это не помогает на самом деле решить проблему.

PS: в Illuminate \ View \ Engines \ CompilerEngine метод handleViewException заменяет исходное исключение:

protected function handleViewException($e, $obLevel)
{
$e = new \ErrorException($this->getMessage($e), 0, 1, $e->getFile(), $e->getLine(), $e);

parent::handleViewException($e, $obLevel);
}
0

По вопросам рекламы [email protected]