15

下面是我想要达到的,后面是我所获得的知识的汇编,无解。

在 Symfony2 项目中,不使用专用 bundle,我希望路径中的第一个目录来定义语言环境。它必须是可选的:

由于在项目结束时我将有超过 100 条路由,并且考虑到可以随时添加语言环境,我需要只编写一次所有语言环境路由

没有机会通过一个路由文件来实现这一目标。SF2.1 中一个有趣的解决方案是链式路由文件,Fabien Potencier 自己解释说:一个文件将语言环境和链作为正常路由的前缀。我们到了:

第一个文件列出了所有其他普通路由的非区域感知路由和指向区域感知路由文件的链。

--路由.yml:

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

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

-- base_routing.yml:

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

@BTUserBundle/Resources/config/routing.yml是一个普通的捆绑路由文件。

好的,这适用于路径中具有区域设置的 URL(示例 2 和 3),但如果我删除可选的区域设置部分(示例 1),则找不到路由。很容易猜到问题出在 {_locale} 令牌中,当 URL 中没有语言环境字符串时,该令牌将 URL 的“用户”部分捕获为语言环境。但是,例如,如果 URL 的第一部分不是 en|fr|it|de,我怎么能告诉它让 URL 保持不变并将其链接到下一个文件?

来自论坛的解决方案是制作 2 条路线:

--路由.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 年以来),但有时我只是惊讶于简单的问题可以使用这个框架需要非常复杂的解决方案。

4

1 回答 1

-1

您总是可以从另一个方向解决它,并使用带有宏的体面编辑器来编写路由文件。几乎没有任何体力劳动,你会达到你想要的。使用正则表达式替换和/或宏来修改它会很简单。

于 2013-09-16T04:52:03.587 回答