两个月前我问过,这里的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}/
Controller 注释
/**
* @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...
最佳答案
在第一个routing.yml中,类型“annotation”指定必须对 Controller 进行内省(introspection)以获取路由。我认为其他一切都被忽略了。您应该尝试删除类型或将其更改为 yml,删除资源条目并指定 _controller 参数的值...我认为您应该看看 yml 路由定义的实际格式是什么。
或者也使用注释定义此默认路由。
关于routes - 路由中的区域设置,无参数的默认语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9859230/