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

标签 routes 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}/

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/

相关文章:

php - 在 cakephp 3 中找不到类 'Router'

javascript - angular2 - 服务值(value)不变

ruby-on-rails - 为什么 Rails 只命名我的一些路由?

php - 如何在 Twig 中嵌入 php

php - 在 Symfony2 中使用 Doctrine 和静态 YAML 数据库

java - Spring中具有动态参数值的 Autowiring 类

java - @Autowired注解有什么好处?

asp.net - ASP NET Web API 路由模板

symfony - 如何动态地将部分附加到 Symfony 2 配置?

ios - 如何在 GMSMarker Google 上制作自定义 UIView 或标签