我在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数据的事件监听器中的代码是通用的,并且必须获取所有数据,即使执行的bundle不会使用它。假设我在xml文件中有一个“name”标记。 “name”标签在IndexBundle中使用,而不是在KontaktBundle中使用,但每次执行事件监听器时,它都会从“name”标签中获取dana,即捆绑包的内容。
有什么想法吗?
答案 0 :(得分:0)
答案是事件监听器默认执行globaly,无论你把它放在什么包中。所以,如果事件监听器在Acme / AcmeBundle / EventListener目录中,如果你注册,他将在每个bundle中执行它在app / config.yml。
但是我还不知道是否有一种透明的方式将事件监听器中的数据传递给当前正在执行的控制器。一种方式是会议,但问题是,是否有内置的symfony方式。
这个问题依然存在。
答案 1 :(得分:0)
我自己的另一个答案。从事件侦听器获取值到控制器的方法是通过服务容器。服务容器对象只是一次性即时,因此在事件监听器中更改对象(我从服务容器获得的对象)将导致控制器中的同一对象。