如何禁用symfony2中某些路由的Listener?

时间:2016-01-18 12:32:40

标签: symfony listener

我们的symfony2应用程序中有几个Listener,如果用户通过某个路径,它们应该什么都不做。

实现这一目标的一个选择是检查非常难看的Uri。

we::ArrowXml a=>String->a XmlTree XmlTree->a XmlTree XmlTree
we name child = w name [] [child]  

result::ArrowXml a=>a XmlTree XmlTree
result = 
  w "wordDocument" [sattr "xmlns:w" wordNS] [body children]
  where
    children = txt "Hello World!!!"
    body = we "body" . we "p" .  we "r"

有没有更优雅的解决方案来实现这一目标?我在考虑注释? 如果是的话怎么做?

2 个答案:

答案 0 :(得分:4)

一种方法是在其定义中标记要忽略的路线。类似的东西:

cerad_game__project__game_report__update:
  pattern:  /project/{_project}/game-report/{_game}/update
  defaults:
    _ignore: true
    _model:      cerad_game__project__game_report__update__model_factory
    _form:       cerad_game__project__game_report__update__form_factory
    _controller: cerad_game__project__game_report__update__controller:action
    _template: '@CeradGame/Project/GameReport/Update/GameReportUpdateTwigPage.html.twig'

一个简单的$ request->有('_ ignore')就可以了。

答案 1 :(得分:1)

您可以注册自己的事件侦听器,其优先级高于应该跳过的每个侦听器。在此侦听器中,您可以执行需要进行的任何测试,以检测是否应跳过其他侦听器。如果是这种情况,只需调用stopPropagation()实例的Event方法即可通过。

但是你需要注意使用哪个优先级来注册你的监听器,因为Symfony本身通过事件监听器执行很多事情,跳过它们可能会导致意外行为。但是,您可以看到list of registered core event listeners in the documentation