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;
}
我最近一直在研究 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;
}