Symfony onKernelException слушатель

1

Я пытаюсь настроить прослушиватель, который уведомляет меня (например, по электронной почте) при возникновении ошибки. Я настроил ExceptionListener который отлично работает, когда я выдаю ошибку 500, например:

throw new \Exception( 'Something went wrong!', 500 );

Однако в других случаях, например, когда я целенаправленно называю несуществующий класс следующим:

$error = new NotExistantClass;

В этом случае я ничего не получаю от своего слушателя, будь то в режиме prod или dev. Также в режиме prod я получаю белую страницу, а не мою страницу с ошибкой 500.

Можно ли избежать такого поведения? (т.е. получить фатальную ошибку, которая не удалась на странице с ошибкой 500 и заставила моего слушателя уведомить меня)

Вот фактический слушатель: (я не ставил services.yml так как слушатель, кажется, работает эффективно)

public function onKernelException(GetResponseForExceptionEvent $event)
{
    $exception = $event->getException();
    $flatException = FlattenException::create( $exception );
    $code = $flatException->getStatusCode();
    //$code = $exception->getCode();
    //die( var_dump( $code ) );
    if ( $code == 500 ) {
        // notifies me
    }
}

Кроме того, если кто-то может просветить использование исключения FlattenException и разницу между кодом состояния и кодом, я все уши!

Теги:
exception
listener

1 ответ

2

Там есть встроенное решение для отправки по электронной почте исключений.

Что касается вашего слушателя, который не работает в некоторых случаях. Неустранимые ошибки не оставляют Symfony возможности обработать их каким-либо образом. Неустранимая ошибка заключается в использовании несуществующего класса или вызове несуществующего метода. Эти типы ошибок являются ошибками программирования и не могут обрабатываться Symfony в основном потому, что PHP там просто умирает.

  • 0
    Оу, облом Но он регистрируется с трассировкой стека, верно? Как это возможно, если PHP просто умирает?
  • 0
    Я считаю, что это находится внутри Symfony\Component\Debug через функцию handleFatal . (И это не то, что я хочу случайным образом переопределить)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню