symfony2:如何创建一个';在任何其他侦听器之前调用了什么?

symfony2:如何创建一个';在任何其他侦听器之前调用了什么?,symfony,oauth,listener,http-redirect,Symfony,Oauth,Listener,Http Redirect,我想在调用任何侦听器之前执行重定向 特别是在hwi的oauthListener启动之前 我想这样做的原因是: 我正在symfony平台/应用程序上实现oauth 我的应用程序管理多个“博客”(wordpress多站点风格) 我希望oauth(facebook、google…)使用单个应用程序,而不必在每次创建新“博客”时都设置一个应用程序 出现的问题: 重定向url必须是唯一的(即使对于google你可以设置多个,我也不想) 我的博客有时有别名=>并不总是通过同一个域浏览 我的会话出错,因为

我想在调用任何侦听器之前执行重定向

特别是在hwi的oauthListener启动之前

我想这样做的原因是:

  • 我正在symfony平台/应用程序上实现oauth
  • 我的应用程序管理多个“博客”(wordpress多站点风格)
  • 我希望oauth(facebook、google…)使用单个应用程序,而不必在每次创建新“博客”时都设置一个应用程序
  • 出现的问题:
    • 重定向url必须是唯一的(即使对于google你可以设置多个,我也不想)
    • 我的博客有时有别名=>并不总是通过同一个域浏览
    • 我的会话出错,因为它们无法在多个域之间共享(子域是,域否)
  • 到目前为止,我制定的解决方案是:
    • 在oauth请求中,我为重定向uri传递了一个通用域
    • 我正在使用state query参数来存储我的源域
  • 我想要的是:
    • 我希望有一个监听器内核或其他先出现的内核来检查我是否设置了这个状态查询参数
    • 我希望它能立即将当前请求重定向到我存储在“state”参数中的原始域
我做错了吗?
如果我想继续,您知道我应该如何声明我的侦听器,以便它首先出现并能够触发立即重定向吗?

内核。request事件是第一个被调度的事件

请查看列表

要在另一个
内核.request
侦听器之前执行特定的侦听器,您可以将
优先级
选项(范围:-255到255,首先执行最高优先级)添加到侦听器的服务配置中

示例

services:
    kernel.listener.your_listener_name:
        class: Acme\DemoBundle\EventListener\AcmeRequestListener
        tags:
            - name: kernel.event_listener
              event: kernel.request
              method: onKernelRequest
              priority: 255
现在,您只需要在侦听器的
onKernelRequest()
方法中的特定条件下执行重定向

我相信你会想出办法的。完整的代码示例将超出此问题的范围

有关如何编写内核事件侦听器的更多说明,请参阅文档一章:

确实如此

我尝试了几次,认为它不起作用,但这可能是缓存清除的问题

那么,对于那些想知道的人: 我处理数据以创建重定向响应(Symfony\Component\HttpFoundation\RedirectResponse)

在onKernelRequest中,我做到了

public function onKernelRequest(GetResponseEvent $event){
    /**
      ... do stuff here
    */

    $event->setResponse($myResponse);
}