Symfony EventSubscriber:页面没有正确重定向

Symfony EventSubscriber: The Page isn't redirecting properly

我最近一直在研究 Symfony4 内核的 EventListeners,我认为我已经掌握了它的基本概念,但我的 EventSubscriber 似乎遇到了 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 它得到 [=17] 臭名昭著的 Firefox 页面=].

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

我已经设置了我的路线:

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

这只是一个渲染函数 - 我觉得这可能会导致问题(无限循环重定向到 flag() 然后执行之前的操作?)但我不确定如何从 setResponse() 方法

渲染我的模板

即使注释掉了路由配置文件,我仍然会收到错误消息。所以不再 100% 确定这是 flag() 无限循环理论

关于无限循环是问题,我确实是对的,添加这个条件以排除 /maintenance url 让它工作:

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