当前位置: 首页 > 知识库问答 >
问题:

删除symfony路由组件中的默认区域设置前缀

戴靖
2023-03-14

我只在个人项目中使用symfony路由组件(没有完整的symfony框架)。我的方法是:在路由中添加路由。yaml文件如下:

index:
    path:     /test
    methods: GET
    controller: 'App\Catalog\Controller\Home\IndexController::index'

register:
    path:     /test/account/register
    methods: GET
    controller: 'App\Catalog\Controller\Account\RegisterController::index'

我的路由工作正常,但我需要添加自动区域设置前缀uri/路由多语言系统像这样:

mydomain/test    //for default language ie: en
mydomain/test/fr
mydomain/test/de
mydomain/test/account/register      //for default language ie:en
mydomain/test/fr/account/register
mydomain/test/de/account/register

如何在路由中添加区域设置前缀。yaml文件并删除默认的区域设置前缀语言?!

共有1个答案

甄华清
2023-03-14

如果您的应用程序是最新的,您可以像这样使用4.1中介绍的国际化路由

# config/routes/annotations.yaml
controllers:
    resource: '../../src/Controller/'
    type: annotation
    prefix:
        en: '' # don't prefix URLs for English, the default locale
        fr: '/fr'
        de: '/de'

否则,您可以引用另一个带有前缀选项的routing.yml文件

# config/routing.yml

french_route:
    resource: "french_routing.yml"
    prefix:   /fr

deutch_route:
    resource: "deutch_routing.yml"
    prefix:   /de

您可以将语言与文件分开,每个文件都会自动带有自己的前缀

 类似资料:
  • 我在我的注解里有。yaml使用注释管线设置的以下设置: 我这里的问题是,我可以创建一个像是否不带区域设置前缀? 这是保护区,我可以使用用户语言。我尝试使用这个symfony路由文档,但我希望保留注释。 目前它看起来像,但我希望。

  • 我需要能够定义部分是可选的路由。这意味着我需要这些URL使用相同的控制器: (语言环境将由请求侦听器设置) 这同样适用于: 问题是我不能定义两个class注释,因为这是无效的/Symfony不接受的;我不能在我的控制器类中复制每一条路由,因为会有大量的路由,这将非常糟糕! 我尝试过只使用一个类注释,但无法使其正常工作。以下是我的尝试: 结论: 作品 作品 失败(因为只有可以工作) 工作 我以为问题

  • 我有一个i18n项目在Symfony 4.1上运行。 我想实现一些路由,如: /= 在本文之后,我将使用注释处理路由,并为注释路由设置全局前缀: 这样,从'.../src/Controller/'注释中定义的所有路由都带有前缀,这导致我的“选择语言”页面和主页之间的冲突。 我想从i18n前缀中排除“选择语言”页面,这样当主页可以停留在 /fr或 /en.时,我就可以使用“/”了 有什么办法可以做到

  • 我安装了三个区域设置捆绑包: JMSi18nRoutingBundle 我的如下所示: 一切都按我的喜好工作,除了我在日志中发现了一个错误: 在堆栈中我发现:的区域设置,但是,我不明白如何将区域设置设置为“en_US”。 我想它来自于对Lunetics的猜测,但是有“en_US”的人应该匹配“en”,而不是“en_US”。 我的主要问题是,我不知道如何跟踪这一点。当我用自己的设置连接到主页时,首先

  • 我在symfony 2.5中的区域设置路由遇到问题。假设我的默认语言是英语。我的示例路由是/user/register/。如果我要求它没有任何语言环境,它应该出现在英文翻译。如果我使用区域设置(例如/fr/user/register/)请求它,它应该与它一起出现。这可以通过以下方式完成: 现在我必须回答以下问题: 我如何简单地避免用户可以使用默认语言作为区域设置来调用路由?在我的示例中,英语是默认