两个月前我问过,如何在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 ......
答案 0 :(得分:2)
在第一个的routing.yml中,类型“annotation”指定必须对路由器进行内省控制。我认为其他一切都被忽略了。您应该尝试删除类型或将其更改为yml,删除资源条目并指定_controller参数的值...我认为您应该看看yml路由定义的格式实际上是什么。
或者也可以使用注释定义此默认路线。