同一捆绑不同的路线

时间:2014-02-03 10:32:01

标签: symfony routing bundle symfony-routing

我需要有不同的路由指向同一个包。 例如:/ mkt / contacts和/ crm / contacts应指向同一个联系人包。

为什么呢?我正在开发一个平台(一个symfony2项目),它有许多应用程序(一个营销应用程序,一个CRM应用程序等等。每个应用程序都是一组模块(bundle),其中一些是在应用程序之间共享的(比如ContactsBundle)。 / p>

我需要做的是共享包的路由前缀是相对于当前应用程序的,所以如果用户在Marketing Application(/ mkt /)中,那么ContactBundle的路由前缀应该是/ mkt /联系。但如果它在CRM应用程序中它应该是/ crm / contacts

我想我可以在routing.yml中创建两个路由资源,如下所示:

route1:
    resource: "@Contactundle/Resources/config/routing.yml"
    prefix:   /crm/contact
route2:
    resource: "@ContactBundle/Resources/config/routing.yml"
    prefix:   /mkt/contact

最大的问题是在使用路径功能时的视图中。我如何知道路线的名称?我能想到的唯一可能的解决方案是创建一些twig扩展,它检查当前的pathinfo并返回正确的路由前缀。

有更好的想法吗?

2 个答案:

答案 0 :(得分:1)

你应该使用一条路线但是使用mkt和crm作为变量。

contact:
    path:      /{ prefix }/contact
    defaults:  { _controller: YourContactBundle:Contact:contact }

然后在树枝或任何你想要的地方

{{ path('contact', { 'prefix': prefix } ) }}

您应该按会话或通过为路径提供参数来检索变量联系人。

因为它只是一些共同的捆绑,我建议给出参数。 在市场应用程序的主页,我会通过{{ path('contact',{ 'app_prefix' : constant_prefix_mkt} ) }}

打电话给联系表

答案 1 :(得分:0)

您不希望使用不同前缀

加载所有捆绑路由文件两次

尝试:

应用程序/ routing.yml中

crm_contact:
    path:      /crm/contact
    defaults:  { _controller: YourContactBundle:Contact:contact }
mkt_contact:
    path:      /mkt/contact
    defaults:  { _controller: YourContactBundle:Contact:contact }

然后在你的树枝上:

{{ path(app.request.attributes.get('_route')) }}