ZF3 Можете ли вы войти в Uncaught исключения? - PullRequest
0 голосов
/ 26 августа 2018

Поскольку не вежливо отвечать в другой теме, я снова задаю вопрос, связанный с этой темой:

Как регистрировать исключения контроллера ZF2

Естьзаявил, что вы можете регистрировать любые Uncaught исключения таким образом, но разве Uncaught исключения исключают дальнейшую работу веб-сервера, выполняемую PHP?Интересно, что здесь имеется в виду или пытались это сделать?

public function onBootstrap(MvcEvent $e)
    {
        $eventManager = $e->getApplication()->getEventManager();
        $moduleRouteListener = new ModuleRouteListener();
        $moduleRouteListener->attach($eventManager);
        /**
         * Log any Uncaught Exceptions, including all Exceptions in the stack
         */
        $sharedManager = $e->getApplication()->getEventManager()->getSharedManager();
        $sm = $e->getApplication()->getServiceManager();
        $sharedManager->attach('Zend\Mvc\Application', 'dispatch.error',
            function($e) use ($sm) {
                if ($e->getParam('exception')){
                    $ex = $e->getParam('exception');
                    do {
                        $sm->get('Logger')->crit(
                            sprintf(
                               "%s:%d %s (%d) [%s]\n", 
                                $ex->getFile(), 
                                $ex->getLine(), 
                                $ex->getMessage(), 
                                $ex->getCode(), 
                                get_class($ex)
                            )
                        );
                    }
                    while($ex = $ex->getPrevious());
                }
            }
        );

1 Ответ

0 голосов
/ 27 августа 2018

разве что Uncaught Exception исключает дальнейшую работу веб-сервера, выполняемую PHP

Нет, uncaught исключения только прекращают обработку текущий запрос по стандартуНастройка PHP, будь то мод-php или fpm или cgi.Zend \ Mvc, тем не менее, перехватывает все исключения во время отправки и делает их доступными для обработчика dispatch.error (код, который вы опубликовали, является таким обработчиком, который регистрирует исключение и все предыдущие исключения в цепочке).Так что исключение на самом деле не застраховано.

...