同捆不同路线

Posted

技术标签:

【中文标题】同捆不同路线【英文标题】:Same bundle different routes 【发布时间】:2014-02-26 19:04:09 【问题描述】:

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

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

我需要做的是共享包的路由前缀是相对于当前应用程序的,所以如果用户在营销应用程序(/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

最大的问题在于使用路径功能时的视图。我怎么知道路线的名称?我能想到的唯一可能的解决方案是创建一些树枝扩展来检查当前的路径信息并返回正确的路由前缀。

有更好的想法吗?

【问题讨论】:

您想知道您的视图中是在 /crm/contact 上还是在 /mkt/contact 上? 【参考方案1】:

您应该使用一种路由,但使用 mkt 和 crm 作为变量。

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

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

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

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

因为它只是一些共同的捆绑包,我建议提供参数。 在市场应用程序的主页中,我会通过 path('contact', 'app_prefix' : constant_prefix_mkt ) 拨打联系表

【讨论】:

【参考方案2】:

您不想使用不同的前缀两次加载所有捆绑路由文件

试试:

app/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')) 

【讨论】:

以上是关于同捆不同路线的主要内容,如果未能解决你的问题,请参考以下文章

Nestjs Swagger - 在不同的路线上发布不同的 API 文档

方格路线走法

如何为每种语言设置不同的路线

在 Show 和 create 路线之间有所不同

Vue.js:将页面标题分配给不同的路线

Nuxtjs/Vuejs 表单数据在导航到不同的路线并使用浏览器后退按钮返回上一个路线时丢失