Symfony4如何在URL中为所有控制器运行_locale前缀?

时间:2018-01-01 22:05:44

标签: routing locale symfony4

我想在我的网站上设置“国际化”。为了解决这个问题,我需要将“locales”设置为所有控制器URL的前缀(例如:mywebsite.com/en/page),然后我在Symfony4文档中找到了这个帮助: https://symfony.com/doc/current/routing/external_resources.html

我已按如下方式修改了文件

  

配置/ routes.yaml

controllers:
    resource: '../src/Controller/'
    type: annotation
    prefix: /{_locale}
    requirements:
        _locale: '%app.locales%'
    defaults:
        _locale: '%locale%'
  

配置/ services.yaml

parameters:
    app.locales: en|es|fr|ru|mg
    locale: 'en'
  

配置/包/ translation.yaml

framework:
    default_locale: '%locale%'
    translator:
        paths:
            - '%kernel.project_dir%/translations'
        fallbacks:
            - '%locale%'

如果我按如下方式编写网址: mywebsite.com/en/page ,一切正常,但如果我省略在网址中编写_locale,例如: mywebsite.com / page ,它返回404错误。 我希望它能够 mywebsite.com/en/page ,因为“en”在我的文件中被指定为default_locale。

我错过了什么?感谢。

2 个答案:

答案 0 :(得分:1)

似乎这个技巧可以达成协议:

#config/services.yaml

parameters:
    app.locales: en|es|fr|ru|mg|
    locale: 'en'

只需在app.locales行的末尾添加 | ,现在我可以在没有_locale前缀的情况下访问控制器

答案 1 :(得分:0)

Symfony 4.3.1(也许也早于4.x,没有测试)的工作方法如下:

atl_token

其余的与问题中的相同。注意:使用此设置时,“ / en /”是可选的,也就是说,无论有没有,它都可以双向工作。