是否可以添加自定义全局Symfony2路由变量,如_format和_locale?
在我的Symfony2项目中,我有一个有帖子的新闻网站。这些帖子可以在不同的地区发表。当前区域(用户选择)必须是url的一部分。因此URL应如下所示:是否可以添加自定义全局Symfony2路由变量,如_format和_locale?,symfony,sonata,symfony-2.7,Symfony,Sonata,Symfony 2.7,在我的Symfony2项目中,我有一个有帖子的新闻网站。这些帖子可以在不同的地区发表。当前区域(用户选择)必须是url的一部分。因此URL应如下所示: /mag => main news site, no region selection /mag/region1/ => posts for region 1 /mag/region2/ => ... /mag/region1/my-news-post-slug => detail view of one post 对于
/mag => main news site, no region selection
/mag/region1/ => posts for region 1
/mag/region2/ => ...
/mag/region1/my-news-post-slug => detail view of one post
对于新闻帖子,我使用了
现在我的问题是,如何将用户的区域选择添加到路由系统中,而不必更改我使用的捆绑包的每个控制器和模板?
当我把它添加到路由配置中
magazin:
resource: '@SonataNewsBundle/Resources/config/routing/news.xml'
prefix: /mag/{region}
我得到一个错误,因为在新闻包(以及其他)的控制器和模板中生成路由时未设置此参数。我需要像
{u format}
或{u locale}
路由变量这样的东西,这些变量显然已经由路由组件添加。可以添加这样的“全局”值吗?看看Symfony是如何使用locale实现这一点的
他们使用事件侦听器从请求参数中捕获区域设置,并将其添加到路由器的上下文参数中。我想您可以使用事件侦听器删除区域号,并将其添加为_region属性。我不明白在没有下游更改的情况下如何使用此属性。我使用easy extends捆绑包扩展了新闻捆绑包,并在控制器中调整了2种方法。我不想复制和编辑原始bundle的所有代码,只想修改/扩展一些真正需要修改的东西。这始终是使用第三方捆绑包的危险之一。也许一种特质会有帮助。这就像一种魅力。虽然
请求
对象没有专用属性,但将其放在参数包中对我来说很好。起初它不起作用,但我只是忘了将侦听器注册为服务。对于区域设置示例,这是在中完成的。