代码之家  ›  专栏  ›  技术社区  ›  treyBake user1850175

symfony eventsubscriber:页面重定向不正确

  •  0
  • treyBake user1850175  · 技术社区  · 7 年前

    我最近一直在为symfony4研究事件监听器的内核,我认为我已经掌握了它的基本概念,但我似乎得到了一个 page isn't redirecting properly 我的事件订阅服务器有问题。

    基本上我想做以下逻辑:

    if file_exists $file
        redirect to file
    else
        carry on as normal
    

    我最初是这样来的 kernel.response . 这是我的当前代码:

    <?php
    namespace App\EventSubscriber;
    
    use Symfony\Component\HttpFoundation\RedirectResponse;
    use Symfony\Component\EventDispatcher\EventSubscriberInterface;
    use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
    use Symfony\Component\HttpKernel\KernelEvents;
    
    class MaintenanceSubscriber implements EventSubscriberInterface
    {
        public function onKernelResponse(FilterResponseEvent $event)
        {
            if (!$event->isMasterRequest()) {
                return;
            }
    
            if (file_exists('maintenance.flag')) {
                $response = new RedirectResponse('maintenance');
                $event->setResponse($response);
            }
        }
    
        public static function getSubscribedEvents()
        {
            return array(
                KernelEvents::RESPONSE => 'onKernelResponse'
            );
        }
    }
    

    我的逻辑基本上就是这样的,当 maintenance.flag 不存在,它按预期进行项目,但当我 touch maintenance.flag 它得到了臭名昭著的火狐页面 Page isn't redirecting properly .

    我不确定我是否遗漏了什么?

    我已经设置了我的路线:

    maintenance:
        path: /maintenance
        controller: App\Controller\Maintenance\FlagController::flag
    

    这只是一个渲染函数-我有一种感觉,这可能是导致问题的原因(无限循环的重定向到 flag() 然后哪个执行前操作?)但我不知道如何从 setResponse() 方法

    即使路由配置被注释掉,我仍然会得到错误。所以不是100%肯定是 旗语() 无穷循环理论

    1 回复  |  直到 7 年前
        1
  •  0
  •   treyBake user1850175    7 年前

    我确实是对的,关于无限循环的问题,添加了这个条件来排除 /maintenance URL使其工作:

    if (strpos($event->getRequest()->getRequestUri(), 'maintenance') !== false) {
        return;
    }
    
    推荐文章