-->

从路线Symfony2的全球和区域设置可选检测(Symfony2 global and option

2019-08-02 16:14发布

这是我想要什么来实现的,其次是我获得的,无解的知识的汇编。

在Symfony2中的项目, 而无需使用专用的包 ,我想在路径的第一个目录来定义的语言环境。 它必须是选择性的:

  • 1. http://www.example.com/user/account =>默认EN区域设置, 用户束, 帐户控制器,默认索引操作。
  • 2. http://www.example.com/fr/user/account =>被迫FR区域...
  • 3. http://www.example.com/en/user/account =>被迫EN区域设置(即使需要EN选项是默认区域)

正如我将在该项目结束时超过100路线,并考虑到语言环境,可以添加任何时候, 我需要所有的区域路由只能写入一次

没有机会实现与一个路由文件。 从SF2.1一个有趣的解决方案是链接的路由文件,由法比安斯基Potencier自己解释:一个文件前缀的语言环境和链条正常的路由。 我们到了:

第一个文件,列出了非语言环境感知的路线和链的语言环境感知路由文件对所有其他正常途径。

- 使用routing.yml:

sys_ajax:
  resource: "@SystemAjax/InternalAjax/get"
  prefix:   /sysajax

locale_routing:
  resource: base_routing.yml
  prefix: /{_locale}
  defaults:
    _locale: fr

-

user:
  resource: "@UserBundle/Resources/config/routing.yml"
  prefix:   /user

@ BTUserBundle /资源/配置/ routing.yml中是一个正常的包路由文件。

好了,所以,对于具有区域设置网址路径的工作原理(实施例2和3),但是没有路由发现如果删除了可选的区域设置部分(实施例1)。 这很容易猜测到该问题来自于{} _locale令牌获取URL作为一个区域的“用户”部分时,有在URL没有语言环境字符串。 但是,我又如何能告诉它让URL非触摸和IT连锁下一个文件,如果该URL的第一部分是不是EN | |它|德例如?

从一个论坛的解决方案是使2路:

- 使用routing.yml:

sys_ajax:
  resource: "@SystemAjax/InternalAjax/get"
  prefix:   /sysajax

locale_routing:
  resource: base_routing.yml
  prefix: /{_locale}
  requirements:
    _locale: fr|en

locale_routing2:
  resource: base_routing.yml
  prefix: /
  defaults:
    _locale: fr

一个规则有语言环境的一部分,一个也没有。 遗憾的是不工作,因为有两次线路resource: base_routing.yml (每个规则),后者覆盖了前者。

我在这里,没有什么好办法?

我爱的Symfony(自2008年),但有时我只是惊讶简单的问题,如何需要使用此框架非常复杂的解决方案。

Answer 1:

你总是可以从另一个方向解决它,并使用与宏一个体面的编辑器编写路由文件。 几乎没有任何手工劳动,你会实现你想要的。 修改将是简单的正则表达式与更换和/或宏。



文章来源: Symfony2 global and optional locale detection from route