代码之家  ›  专栏  ›  技术社区  ›  Michael Millar

如何避免在生产时在Symfony2中显示堆栈跟踪?

  •  0
  • Michael Millar  · 技术社区  · 7 年前

    当没有必要角色的用户尝试访问需要更高令牌的页面时,我理所当然地得到了

    AccessDeniedHttpException:令牌没有所需的角色

    “文件”=“gt;字符串'/var/www/myApp/vendor/jms/security-extrabundle/jms/SecurityExtraBundle/security/Authorization/Interception/MethodSecurityInterceptor。php'

    如何删除调试信息?

    app.php )还有那个

    $kernel = new AppKernel('prod', false);
    

    为了完成基于Robert答案的解决方案,我不得不调整yml语法以包含破折号

    services:
        core.exceptlistener:
            class:  UserBundle\Listener\ExceptionListener
            arguments: ['@service_container', '@templating']
            tags:
                - { name: kernel.event_listener, event: kernel.exception, method: onKernelException }
    

    然后在onKernelException中指定的位置创建细枝文件,确保该文件继承了项目其余部分的基本细枝

    1 回复  |  直到 7 年前
        1
  •  1
  •   Robert    7 年前

    REG:为了避免堆栈跟踪,可以使用事件侦听器

    侦听器类

    <?php
    namespace UserBundle\Listener;
    use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;
    use Symfony\Component\HttpFoundation\Response;
    use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;
    use Symfony\Component\DependencyInjection\ContainerInterface;
    use Twig\Template;
    
    /**
     * Created by PhpStorm.
     * User: robert
     * Date: 20/8/17
     * Time: 2:26 PM
     */
    class ExceptionListener
    {
        /**
         *
         * @var ContainerInterface
         */
        private $container;
    
        function __construct($container) {
            $this->container = $container;
        }
        public function onKernelException(GetResponseForExceptionEvent $event)
        {
            // We get the exception object from the received event
            $exception = $event->getException();
            $response = new Response($this->container->get('templating')->renderResponse('UserBundle:Exception:error403.html.twig',
                array('exception'=>$exception->getMessage())));
    
            $event->setResponse($response);
        }
    
    }
    

    services:
            core.exceptlistener:
                class:  UserBundle\Listener\ExceptionListener
                arguments: ['@service_container', '@templating']
                tags:
                    { name: kernel.event_listener, event: kernel.exception, method: onKernelException }