2012-08-02 106 views
7

我在我的routing.yml中指定了每条路径中的参数_locale要求,我认为这必须是简化这种情况的一些东西。Symfony2路由全局{_locale}要求

的routing.yml

ProjectBaseBundle_index: 
    pattern: /{_locale} 
    defaults: { _controller: ProjectBaseBundle:Default:index } 
    requirements: 
     _locale: en|es 

ProjectBaseBundle_privacy: 
    pattern: /privacy/{_locale} 
    defaults: { _controller: ProjectBaseBundle:Default:privacy } 
    requirements: 
     _locale: en|es 

..... 

ProjectBaseBundle_legal: 
    pattern: /legal/{_locale} 
    defaults: { _controller: ProjectBaseBundle:Default:legal } 
    requirements: 
     _locale: en|es 

我使用Symfony2.1的Beta 3

可以指定我的所有路由全球_locale要求?

+0

在哪个版本的Symfony上工作? – j0k 2012-08-02 16:13:19

+0

Symfony 2.1,我没有提到,因为我认为这是框架的“旧”功能 – unairoldan 2012-08-02 17:14:49

回答

11

我发现了一个办法做到这一点:

使用“主”的路由导入路由配置。由于我的捆绑包通常有太多的信息,我一直在不同的“模块”中分离控制器,资源和路由。由于这种做法的结果是,我发现这一点:

大师的routing.yml

ProjectBaseBundle_default: 
    resource: "@ProjectBaseBundle/Resources/config/routing-default.yml" 
    prefix: /{_locale}/project/ 
    requirements: 
     _locale: en|es|de|fr 

儿童路由default.yml

ProjectBaseBundle_default_privacy: 
    pattern: /privacy 
    defaults: { _controller: ProjectBaseBundle:Default:privacy } 

ProjectBaseBundle_default_legal: 
    pattern: /legal 
    defaults: { _controller: ProjectBaseBundle:Default:legal } 

ProjectBaseBundle_default_usage: 
    pattern: /usage 
    defaults: { _controller: ProjectBaseBundle:Default:usage } 

有了这个路由配置,最大限度地减少我需要编写语言环境要求的地方。

+1

这是一个很棒的解决方案。谢谢。 – 2013-03-26 19:47:11

+1

这非常有用。但我徘徊。如果我想让其中一个区域设置为默认值(例如'es'),那么我可以拥有像/ project/privacy(隐式指向'en'区域设置)的路线,而我仍然显式地使用/ {_ locale} /。 ..其他地区的路线。有什么方法可以说在'master'routing.yml中。我一直在尝试使用默认的_locale ...但是转而成为一个好心的想法。问候 – javigzz 2013-04-17 09:55:53

+0

我还没有找到如何做到这一点。使用/ _locale /参数导入一个路由之前,需要使用它。 – unairoldan 2013-04-22 13:02:10

0

看看这个讨论:

https://groups.google.com/forum/#!topic/symfony-devs/6oxsa7whBps

看来,这是可以做到类似你需要什么东西,只表示{_locale}参数在的开头指定路线,而不是最后。你也将需要运行的2.1版本的symfony测试4(根据法比安斯基)

+0

我已经看过这个讨论,但是在2011年6月发布了日期: – unairoldan 2012-08-02 17:15:56