首页 文章

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

提问于
浏览
2

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

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

Example

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 Annotations

/**
  * @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 回答

  • 2

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

    或者也可以使用注释定义此默认路由 .

相关问题