如何在symfony3.4路由中使用默认语言环境

时间:2017-07-20 15:59:49

标签: symfony routes locale

我想打开我的网站:

所以我把这段代码放在routing.yml

teach:
   resource: "@TeachBundle/Controller/"
   type:     annotation
   prefix:   /{_locale}
   requirements:
       _locale: "|en|fa"

我的控制器是这样的:

/**
 * @Route("/mrg")
 */
public function mrgAction(Request $request)
{
     $lang=$request->getLocale();

     return new Response("<html><body>Your language: <b> $lang </b></body></html>");
}

所有网址都有效但http://127.0.0.1:8000/mrg不起作用并返回:

  

找不到“GET / mrg”的路线

如果我尝试打开http://127.0.0.1:8000/mrg然后打开http://127.0.0.1:8000/en/mrg,我需要使用默认语言。

有没有解决方案可以解决这个问题?

3 个答案:

答案 0 :(得分:0)

试试这个:

{_locale}

/**
 * @Route("/{_locale}/mrg")
 */
public function mrgAction(Request $request)
{
     $lang=$request->getLocale();

     return new Response("<html><body>Your language: <b> $lang </b></body></html>");
}

Setting a Default Locale

# app/config/config.yml
framework:
    default_locale: en

如果不起作用,您可以展示自己的app/config/routing.yml

答案 1 :(得分:0)

在路由配置中添加defaults选项,以设置默认语言环境(如果未在控制器@Route中设置:

teach:
    resource: "@TeachBundle/Controller/"
    type:     annotation
    prefix:   /{_locale}
    requirements:
        _locale: "|en|fa"
    defaults:
        _locale: 'en' # or '%locale%'

答案 2 :(得分:0)

我建议您使用:BeSimpleI18nRoutingBundle

https://github.com/BeSimple/BeSimpleI18nRoutingBundle

use BeSimple\I18nRoutingBundle\Routing\Annotation\I18nRoute;

class NoPrefixController
{
    /**
     * @I18nRoute({ "en": "/welcome", "fr": "/bienvenue", "de": "/willkommen" }, name="homepage")
     */
    public function indexAction() { }
}