Php Symfony全局和特定前缀控制器操作

Php Symfony全局和特定前缀控制器操作,php,symfony,Php,Symfony,我在文件routing.yml中为我的所有路由配置了prexif,如: app: resource: "@AppBundle/Controller/" type: annotation prefix: /{_locale} requirements: _locale: en|fr|es 这样,对于我所有的控制器,我都有一个前缀\u locale,比如:/en/buy,/en/home 我有另一个控制器AjaxController,我不

我在文件routing.yml中为我的所有路由配置了prexif,如:

app:
    resource: "@AppBundle/Controller/"
    type:     annotation
    prefix:   /{_locale}
    requirements:
        _locale: en|fr|es
这样,对于我所有的控制器,我都有一个前缀
\u locale
,比如:
/en/buy
/en/home

我有另一个控制器
AjaxController
,我不需要使用这个前缀,而是另一个:
ajax

如何为所有控制器保留全局前缀
\u locale
,而仅为AjaxController使用另一个前缀


谢谢

在symfony路由中,最后声明的规则是路由器使用的规则。我没有测试它,但我想类似的东西应该会起作用:

app:
    resource: "@AppBundle/Controller/"
    type:     annotation
    prefix:   /{_locale}
    requirements:
        _locale: en|fr|es

app_ajax:
    resource: "@AppBundle/Controller/AjaxController.php"
    type:     annotation
    prefix:   /ajax
再一次,我没有尝试!但我很确定它会起作用的。
一般来说,我不太喜欢这种做法,因为它依赖于路由器的行为,这种行为可能会随着版本的变化而变化…

-看来你现在运气不好。您可以覆盖路由器,但这比简单地手动向其他路由添加前缀要复杂得多。请小心:Symfony路由器将始终选择它找到的第一个匹配路由。当路由器分析请求但路由器解析yaml/注释(或任何格式)时,它将选择第一个匹配路由在匹配过程之前。路由声明以最后一个声明获胜的方式读取。如果路由具有相同的名称,那么最后一个可能会覆盖它,但这意味着第一个路由实际上不存在。当路由器解析路由时,它会按照提供的顺序进行。好的,事实上这个解决方案正在工作,我的坏消息:p谢谢!第二个路由应用程序与第一个路由应用程序不同,这是因为第一组路由只接受
\u locale
作为“en”、“fr”或“es”。他们也会按照其他顺序工作。