php - kernel.request 事件 setResponse 到 RedirectResponse 不工作

标签 php http events symfony

我正在尝试使用找到的 kernel.request 事件 here

我的示例的简化版本是重定向用户,除非他们已经在重定向的页面上。我看到的问题是我得到的页面没有任何样式 - 似乎我的样式和 js 也可能被重定向。

这是代码

服务.yml

services:
    app.RequestListener:
        class: App\EventListener\RequestListener
        arguments: [ @security.context ]
        tags:
          - { name: kernel.event_listener, event: kernel.request, method: redirectUser }

请求监听器.php

class requestListener
{
   public function redirectUser()
   {
      if($event->getRequest()->getPathInfo() != '/') {
         //app_frontend_home_index goes to '/'
         $event->setResponse(new RedirectResponse($this->router->generate('app_frontend_home_index')));
      }
   }
}

我也在设置 ?test=dont_redirect 的地方尝试过,一旦设置它就不应该重定向

   public function redirectUser()
   {
      if(is_null($event->getRequest()->get('test'))) {
         //app_frontend_home_index goes to '/'
         $event->setResponse(new RedirectResponse($this->router->generate('app_frontend_home_index', array('test' => 'dont_redirect'))));
      }
   }

阅读我提供的链接中的部分后 - 听起来这是正确的事件。有没有办法让它发挥作用?

最佳答案

在进行重定向之前尝试检查以下条件:

if ($event->getRequest()->attributes->get('_route')[0] !== '_') {
}

关于php - kernel.request 事件 setResponse 到 RedirectResponse 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18841120/

相关文章:

http - 我可以在 HTTP header 中使用 Unicode 字符吗?

javascript - jQuery window.on resize 没有在正确的时间触发

javascript - 如何在 JavaScript 中发生粘贴文本事件时阻止输入文本事件处理程序触发?

php - 如何使用 phpmyadmin 导出 MySQL 中的特定列?

http - 文件服务器不会提供超过 32 KB 的文件

php - 编辑和删除按钮在php,ajax中添加到服务器端数据表

apache - 带有查询字符串的 httpd 缓存规则

java - 如何取消订阅 TornadoFX 中的 Activity ?

php - 使用 exec() 运行 PhantomJS 时返回错误代码 127

PHP - 从元值获取数据