是否可以添加自定义全局Symfony2路由变量,如_format和_locale?

是否可以添加自定义全局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 对于

在我的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
对于新闻帖子,我使用了

现在我的问题是,如何将用户的区域选择添加到路由系统中,而不必更改我使用的捆绑包的每个控制器和模板? 当我把它添加到路由配置中

magazin:
    resource:   '@SonataNewsBundle/Resources/config/routing/news.xml'
    prefix:     /mag/{region}

我得到一个错误,因为在新闻包(以及其他)的控制器和模板中生成路由时未设置此参数。我需要像
{u format}
{u locale}
路由变量这样的东西,这些变量显然已经由路由组件添加。可以添加这样的“全局”值吗?

看看Symfony是如何使用locale实现这一点的


他们使用事件侦听器从请求参数中捕获区域设置,并将其添加到路由器的上下文参数中。

我想您可以使用事件侦听器删除区域号,并将其添加为_region属性。我不明白在没有下游更改的情况下如何使用此属性。我使用easy extends捆绑包扩展了新闻捆绑包,并在控制器中调整了2种方法。我不想复制和编辑原始bundle的所有代码,只想修改/扩展一些真正需要修改的东西。这始终是使用第三方捆绑包的危险之一。也许一种特质会有帮助。这就像一种魅力。虽然
请求
对象没有专用属性,但将其放在参数包中对我来说很好。起初它不起作用,但我只是忘了将侦听器注册为服务。对于区域设置示例,这是在中完成的。