我们的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"
有没有更优雅的解决方案来实现这一目标?我在考虑注释? 如果是的话怎么做?
答案 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。