symfony - 同 bundle 不同路线

标签 symfony routing bundle symfony-routing

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

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

我需要做的是共享包的路由前缀是相对于当前应用程序的,所以如果用户在营销应用程序(/mkt/)中,那么 ContactBundle 的路由前缀应该是/mkt/contact。但如果它在 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

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

有更好的想法吗?

最佳答案

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

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

然后在 Twig 或任何你想要的地方
{{ path('contact', { 'prefix': prefix } ) }}

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

由于它只是一些共同的 bundle ,我建议提供参数。
在市场应用程序的主页中,我会通过 {{ path('contact',{ 'app_prefix' : constant_prefix_mkt} ) }} 调用联系表

关于symfony - 同 bundle 不同路线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21524910/

相关文章:

symfony - 找不到服务 "fos_elastica.finder.app.user"

symfony - symfony 2.4 中奏鸣曲管理中关系对象的数据网格过滤器作为文本字段(而不是下拉列表)

ruby-on-rails - 在 Windows 上通过代理安装 rails bundle

mysql2 gem 安装错误

asp.net-mvc - SignalR 和 MVC 包

php - 奏鸣曲管理员 : Use multiple document classes (types)

symfony - Fos elastica 滤波器结果与数组 "record id' s"

ruby - Sinatra 路由异常

c - 通过SIOCADDRT添加默认网关时指定接口(interface)

controller - 在 codeigniter 中创建动态 url