路由中的区域设置,无参数的默认语言

时间:2012-03-25 09:46:47

标签: routing symfony annotations

两个月前我问过,如何在uri中用语言参数实现路由:Locale in Routing, Default Language also without Parameter

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

示例

http://example.com/
http://example.com/de/
http://example.com/about/
http://example.com/de/about/
...

这是我的测试设置,它给出了以下错误:

的routing.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 »

router:debug只显示第二条路径:

_site_startpage                   ANY      /{_locale}/
_site_site                        ANY      /{_locale}/{slug}/

编辑2: 我最终使用了JMSI18nRoutingBundle ......

1 个答案:

答案 0 :(得分:2)

在第一个的routing.yml中,类型“annotation”指定必须对路由器进行内省控制。我认为其他一切都被忽略了。您应该尝试删除类型或将其更改为yml,删除资源条目并指定_controller参数的值...我认为您应该看看yml路由定义的格式实际上是什么。

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