Routing 路由中的区域设置,不带参数的默认语言

Routing 路由中的区域设置,不带参数的默认语言,routing,symfony,annotations,Routing,Symfony,Annotations,两个月前我问过,如何在uri中用语言参数实现路由: 但是现在,为了避免双重内容,我希望使用不带参数的默认语言(en)和带参数的其他语言。换句话说,我需要根据_locale参数定义路由前缀 示例 http://example.com/ http://example.com/de/ http://example.com/about/ http://example.com/de/about/ ... 这是我的测试设置,下面显示了错误: 路由。yml: _site_en: resource:

两个月前我问过,如何在uri中用语言参数实现路由:

但是现在,为了避免双重内容,我希望使用不带参数的默认语言(en)和带参数的其他语言。换句话说,我需要根据_locale参数定义路由前缀

示例

http://example.com/
http://example.com/de/
http://example.com/about/
http://example.com/de/about/
...
这是我的测试设置,下面显示了错误:

路由。yml:

_site_en:
    resource: "@MyMainBundle/Controller/SiteController.php"
    type:     annotation
    requirements: { _locale : en }
    prefix: /

_site:
    resource: "@MyMainBundle/Controller/SiteController.php"
    type:     annotation
    requirements: { _locale : fr|es|it|de }
    prefix: /{_locale}/
控制器注释

 /**
  * @Route( "/", name="_site_startpage", defaults={"_locale" = "", "slug"="startpage"} )
  * @Route("/{slug}/", name="_site_site", defaults={"_locale"=""})
  *
  * @ParamConverter("page", class="MyMainBundle:Page")
  */
public function siteAction( $slug, $_locale, Page $page )
如何以正确的方式进行

编辑: 结果我得到了一个异常,没有定义到路径的路由

No route found for "GET /"
404 Not Found - NotFoundHttpException
1 linked Exception:
ResourceNotFoundException »
路由器:调试仅显示第二个路由:

_site_startpage                   ANY      /{_locale}/
_site_site                        ANY      /{_locale}/{slug}/
编辑2:
最后,我在routing.yml中使用了JMSI18nRoutingBundle…

。首先,类型“annotation”指定必须对控制器进行路由自检。我想其他一切都被忽略了。您应该尝试删除类型或将其更改为yml,删除资源条目并指定_controller参数的值。。。我认为您应该看看yml路由定义的实际格式


也可以使用注释定义此默认路线。

“未工作”是模糊的。我想在parameters.ini中已经定义了默认的语言环境,不是吗?所以,也许你应该在没有默认设置和需求部分的情况下尝试。对不起,你是对的,我更新了这个问题。也许你的默认区域设置不是en,但没有满足需求。试着把它们去掉,你仍然可以看到404。同时运行router:debug任务以查看是否考虑了您的路由。我只是再次更新了问题,并将示例缩减到最小。看起来第二条路线覆盖了第一条路线。此外,routing.yml中定义的要求也不起作用。是否有其他方法根据_locale参数定义路由前缀?有什么想法吗?