Я пытаюсь настроить прослушиватель, который уведомляет меня (например, по электронной почте) при возникновении ошибки. Я настроил 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 и разницу между кодом состояния и кодом, я все уши!
Там есть встроенное решение для отправки по электронной почте исключений.
Что касается вашего слушателя, который не работает в некоторых случаях. Неустранимые ошибки не оставляют Symfony возможности обработать их каким-либо образом. Неустранимая ошибка заключается в использовании несуществующего класса или вызове несуществующего метода. Эти типы ошибок являются ошибками программирования и не могут обрабатываться Symfony в основном потому, что PHP там просто умирает.
Symfony\Component\Debug
через функциюhandleFatal
. (И это не то, что я хочу случайным образом переопределить)