Symfony 2.4: почему слушатель kernel.exception не улавливает 500 ошибок

Я пытаюсь создать слушателя для прослушивания 403, 404 и 500 исключений. Это прекрасно работает для 403 и 404 исключений, но не для 500 исключений. Для 500 исключений (или исключений, которые будут возвращены как 500 ошибок для клиента) метод onKernelException никогда не вызывается. Похоже, что то же самое в моем текущем проекте Symfony и когда код добавлен в чистую установку Symfony 2.4.1.

Затем я ввожу ошибку 500, выполняя несуществующую функцию.

В среде разработки я получаю сгенерированную Symfony страницу со словами "Упс, похоже, что-то пошло не так." а потом просматривает информацию о брошенномUndefinedFunctionException» вместе с кодом статуса 500.

В производственной среде я получаю пустую страницу вместе с кодом состояния 500. В журнале ошибок prod.log я получаю "Неустранимая ошибка PHP: вызов неопределенной функции " ошибка с трассировкой стека.

Поскольку Symfony явно перехватывает эту ошибку, почему я не могу перехватить соответствующее исключение с помощью прослушивателя kernel.exception?

Класс ям с помощью это:

templating = $templating;
        $this->kernel = $kernel;
    }

    public function onKernelException(GetResponseForExceptionEvent $event)
    {
        $container = $this->kernel->getContainer();

        // Exception object
        $exception = $event->getException();

        // Create Response object
        $response = new Response();

        // Get view name
        $viewName = $container->getParameter('theme') . ':Exception:exception.html.twig';
        if (!$this->templating->exists($viewName)) {
            $viewName = 'AckebrinkChallengerSystemBundle:Exception:exception.html.twig';
        }

        // Set response content
        $response->setContent($this->templating->render($viewName, array('exception' => $exception)));

        // HttpExceptionInterface is a special type of exception that
        // holds status code and header details
        if ($exception instanceof HttpExceptionInterface) {
            $response->setStatusCode($exception->getStatusCode());
            $response->headers->replace($exception->getHeaders());
        } else {
            $response->setStatusCode(500);
        }

        // set the new $response object to the $event
        $event->setResponse($response);
    }
}

и конфигурация службы, которую я использую:

services:
    kernel.listener.system_exception_listener:
        class: SystemBundle\Listener\ExceptionListener
        arguments:
            - @templating
            - @kernel
        tags:
            - { name: kernel.event_listener, event: kernel.exception, method: onKernelException }

Ответы на вопрос(2)

Ваш ответ на вопрос