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

时间:2015-07-22 13:05:31

标签: 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

对于新闻帖子,我使用了Sonata News Bundle

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

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

我收到错误,因为在新闻包(和其他人)的控制器和模板中生成路由时未设置此参数。我需要像路由组件已经添加的{_format}{_locale}路由变量这样的东西。是否可以添加“全局”值?

1 个答案:

答案 0 :(得分:1)

看看Symfony如何通过语言环境来做到这一点。

https://github.com/symfony/symfony/blob/2.8/src/Symfony/Component/HttpKernel/EventListener/LocaleListener.php

他们使用事件监听器从请求参数中捕获语言环境,并将其添加到路由器的上下文参数中。