Symfony2路由异常:访问/及/nl均提示No route found
解决Symfony2路由匹配问题
针对你遇到的两个路由报错问题,我们一步步来排查和解决:
问题1:访问GET /提示“No route found for 'GET /'”
当前你的所有业务路由都挂载在/{_locale}/前缀下,根路径/没有对应的路由规则,所以Symfony找不到匹配的路由。你可以通过两种方式解决:
方案1:重定向到默认语言首页
在app/config/routing.yml中添加重定向路由,把根路径指向默认语言的首页:
homepage_redirect: path: / defaults: _controller: FrameworkBundle:Redirect:redirect route: softlogo_works_default_index # 替换成你WorksBundle中实际的首页路由名称 permanent: true _locale: en # 设置你的默认语言,比如en
方案2:直接绑定控制器处理根路径
如果不想重定向,也可以让根路径直接指向某个控制器动作:
homepage: path: / defaults: _controller: SoftlogoWorksBundle:Default:index _locale: en # 默认语言
问题2:访问http://localhost/nl提示“No route found for 'GET /nl'”
你当前的softlogo_works路由前缀是/{_locale}/(带尾部斜杠),这意味着WorksBundle内的路由都是/{_locale}/xxx的格式,而/nl(不带尾部斜杠)没有对应的匹配规则。另外,路由前缀本身不是完整路由,只是给bundle内的路由加前缀,所以需要单独处理/{_locale}的匹配。
解决方法
方法1:添加单独的语言根路由
在app/config/routing.yml中新增一个匹配/{_locale}的路由:
softlogo_works_locale_root: path: /{_locale} defaults: _controller: SoftlogoWorksBundle:Default:index # 指向你的首页控制器 requirements: _locale: en|pl|ru|fr|nl
方法2:调整前缀并统一路由格式
把softlogo_works的前缀改成/{_locale}(去掉尾部斜杠),然后在WorksBundle的routing.yml中添加根路由:
主routing.yml修改:
softlogo_works: resource: "@SoftlogoWorksBundle/Resources/config/routing.yml" prefix: /{_locale} requirements: _locale: en|pl|ru|fr|nl
WorksBundle的routing.yml新增根路由:
softlogo_works_home: path: / defaults: _controller: SoftlogoWorksBundle:Default:index
额外检查项
- 确保
config.yml中设置了默认语言:
framework: default_locale: en # 替换成你的默认语言
- 执行命令
php app/console router:debug查看所有已注册的路由,确认你的路由是否正确加载。
内容的提问来源于stack exchange,提问作者Jarek
相关产品推荐
相关产品推荐

