修改核心听众的顺序

时间:2016-03-04 17:01:25

标签: php symfony

TL; DR 您能否设置核心Symfony侦听器的优先级,以便GuardAuthenticationListenerRouterListener之前触发

-

我有一个遗留的应用程序和symfony'微内核'应用程序并排坐在一起,虽然两者交织在一起,因为symfony应用程序需要在某些时候使用遗留应用程序中的位,现在我第一次需要从遗留应用程序中调用一些symfony事物。

在我详细介绍此问题之前,请先阅读设置http://jenko.me/legacy/2016/02/03/an-escape-route-from-legacy-with-stackphp-and-the-symfony-microkernel/

的背景资料

所以我将遗留应用程序的安全方面迁移到Symfony,所有这一切都不是太糟糕,主要是部分归功于本博文http://php-and-symfony.matthiasnoback.nl/2012/07/symfony2-security-using-advanced-request-matchers-to-activate-firewalls/中概述的技术和博客文章我较早前提过。对于基于URL的访问控制,这一切都很有效。

遗留代码中有些地方虽然我需要调用isGranted()调用来检查用户是否具有权限。如果路径存在于Symfony应用程序中,即它已经过Symfony生命周期并且所有侦听器都已解雇,这一切都正常。

我的问题在于,当应用程序在symfony应用程序中存在的路径时(即它落入遗留应用程序),方法是抛出NotFoundException RouterListener然后其他侦听器(例如为用户创建令牌所需的安全侦听器)不会触发。

所以, TL; DR 我想知道你是否可以改变核心监听器的优先级顺序。在我的情况下,我希望安全监听器(特别是GuardAuthenticationListenerRouterListener之前触发。

有一种解决方法是在symfony应用程序中添加所有路由,即使它们未被处理,这样做至少允许所有侦听器触发,从而给我令牌I需要我的isGranted支票。

1 个答案:

答案 0 :(得分:0)

好的,所以更多地考虑我的解决方法'我可以使用它作为一种更好的方法。所以我把它添加到我的路由..

catch_all:
    path: /{route}
    requirements:
        route: .*

所以所有路线都会被我的Symfony应用程序捕获,从而通过听众的舞蹈,如果不处理,最终会落入遗留应用程序。邦扎。