我最近一直在为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%肯定是
旗语()
无穷循环理论