gpt4 book ai didi

url-routing - 来自路由的 Symfony2 全局和可选区域设置检测

转载 作者:行者123 更新时间:2023-12-03 16:51:06 25 4
gpt4 key购买 nike

这是我想要实现的,然后是我获得的知识的汇编,没有解决方案。

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

  • 1. http://www.example.com/user/account => 默认 EN 语言环境、用户包、帐户 Controller 、默认索引操作。
  • 2. http://www.example.com/fr/user/account => 强制 FR 语言环境...
  • 3. http://www.example.com/en/user/account => 强制 EN 语言环境(即使 EN 是默认语言环境也是必需的选项)

  • 由于我在项目结束时将有 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),则找不到路由。当 URL 中没有区域设置字符串时,很容易猜测问题来自 {_locale} 标记捕获 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 年以来),但有时我只是惊讶于使用此框架解决简单的问题可能需要非常复杂的解决方案。

    最佳答案

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

    关于url-routing - 来自路由的 Symfony2 全局和可选区域设置检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13358873/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com