Intereting Posts
Какой HTML Parser (желательно PHP) поддерживает получение смещения текущего узла во входной строке? Продолжающаяся серия символов в строке, как разбить ее на определенную точку, например, 30 символов в php Вставка данных формы в таблицу базы данных MySQL .ajax () не будет завершен до тех пор, пока предыдущий вызов .ajax () не будет завершен? как я могу получить все опции в нескольких вариантах, используя PHP? curl -F, что это значит? php instagram Проблема в преобразовании строки в ненадежный код (в PHP, используя phlyLabs punycode string converter) Предупреждение: mysql_fetch_array () ожидает, что параметр 1 будет ресурсом, boolean given Преобразование .mp4 в .mp3 с использованием чистого PHP Сортировка и группировка результатов по дате как сгенерировать файл doc с помощью php PHP Linefeeds (\ n) не работает Понимание входного экранирования в PHP Оптимизация Imagick annotateImage Как я могу разобрать этот ответ от nusoap на php variable / array

Symfony 2.4: Почему 500 ошибок не пойманы приложением kernel.exception?

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

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

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

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

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

Класс, который я использую:

<?php namespace SystemBundle\Listener; use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface; use Symfony\Bundle\FrameworkBundle\Templating\EngineInterface; /** * This exception listener will listen to 500, 404, and 403 errors and render a corresponding view * * @SuppressWarnings("static") * @SuppressWarnings("else") */ class ExceptionListener { protected $templating; protected $kernel; public function __construct(EngineInterface $templating, $kernel) { $this->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 } 

Прежде всего, убедитесь, что вы очистили кеш Prod.

Во-вторых, посмотрите, что-то на веб-сервере ловит ошибки для вас, то есть fastcgi_intercept_errors в Nginx, но это вряд ли произойдет.

В-третьих, попробуйте сделать исключение вместо вызова не объявленной функции.

В-четвертых, попробуйте установить $ event-> setResponse как можно раньше в прослушиватель исключений, чтобы убедиться, что в самом обработчике нет ошибки.

Кроме этого, я понятия не имею. Код выглядит нормально. Вы пробовали с XDebug посмотреть, как происходит поток кода?

В PHP 7 введены исключения фатальной ошибки. Если вы находитесь в PHP 5.X, приложение останавливается.