将数据从事件侦听器传输到控制器


Transferring data from event listener to controller

我在 IndexBundle 中设置了一个 before 事件侦听器。事件侦听器从 xml 文件中获取一些数据。该数据需要在与事件侦听器关联的控制器中使用。那么,如何将数据从事件侦听器传输到控制器呢?

另外,如何创建一个全局事件侦听器,该侦听器不会与任何捆绑包相关联,而是与所有捆绑包相关联?我尝试在 app/config.yml 中使用多个类参数,如下所示......

language_listener:
         class: Hotel'IndexBundle'EventListener'LanguageEventListener
         class: Hotel'KontaktBundle'EventListener'LanguageEventListener
         tags:
             - { name: kernel.event_listener, event: kernel.controller, method:     onKernelController }

它有效,但是,事件侦听器中收集 XML 数据的代码是通用的,必须获取所有数据,即使执行捆绑包不会使用它。假设我在 xml 文件中有一个"名称"标签。"name"标签用于IndexBundle而不是KontaktBundle,但每次执行事件侦听器时,它都会从"name"标签中获取dana,与捆绑包有关。

答案是,事件侦听器默认执行全局性,无论您将其放入哪个捆绑包中。因此,如果事件侦听器位于 Acme/AcmeBundle/EventListener 目录中,如果您在 app/config.yml 中注册它,他将在每个捆绑包中执行。

但是我仍然不知道是否有一种透明的方式来将事件侦听器中获取的数据传输到当前执行的控制器。一种方法是会话,但问题是,是否有内置的symfony方法可以做到这一点。

这个问题仍然存在。

我自己的另一个答案。从事件侦听器到控制器获取值的方法是槽式服务容器。服务容器对象仅实例化一次,因此更改事件侦听器中的对象(我从服务容器获得的对象)将导致控制器中的相同对象。