Symfony路由问题,路由被忽略

时间:2010-07-28 11:58:52

标签: routing symfony1

我的app/frontend/config/routing.yml中有以下内容:

homepage:
  url:   /
  param: { module: main, action: index }

default_index:
  url:   /:module
  param: { action: index }

default:
  url:   /:module/:action/*

sf_guard_register:
  url:   /register
  param: { module: user, action: register }

sf_guard_signin:
  url:   /login
  param: { module: sfGuardAuth, action: signin }

sf_guard_signout:
  url:   /logout
  param: { module: sfGuardAuth, action: signout }

sf_guard_password:
  url:   /request_password
  param: { module: sfGuardAuth, action: password }

当我尝试/register路线时,我明白了:

  

动作“注册/索引”不存在。

我应该指定,我没有“注册”模块,如果手动调用我的用户模块运行良好。另外,其他路线工作正常。

欢迎任何想法,谢谢!

3 个答案:

答案 0 :(得分:4)

符合杰里米的回答:

由于您的default_index路由位于上方,因此转到/register会导致此路由匹配。由于它位于sf_guard_register路线之前,因此只有第一个匹配“计数”。

您的routing.yml应如下所示:

sf_guard_register:
  url: /register
  param: { module: user, action: register }

sf_guard_signin:
  url: /login
  param: { module: sfGuardAuth, action: signin }

sf_guard_signout:
  url: /logout
  param: { module: sfGuardAuth, action: signout }

sf_guard_password:
  url: /request_password
  param: { module: sfGuardAuth, action: password }

homepage:
  url: /
  param: { module: main, action: index }

default_index:
  url: /:module
  param: { action: index }

default:
  url: /:module/:action/*

此外,您可能还想要遵循一些最佳做法:

  1. 禁用默认路由并仅依赖于命名路由(例如@homepage)比让symfony在使用url_forlink_to帮助程序时确定要匹配的路由更快。因此,请禁用默认路由并自行创建路由。然后,在生成URL时使用路由名称。
  2. 最常使用的路线应放在顶部,例如,如果您在所有网页上都有注册链接,则应将sf_guard_register放在顶部。
  3. 只需5美分 - 希望你觉得它有用; - )

答案 1 :(得分:1)

路由按照routing.yml文件中列出的顺序进行处理。因此,url / register在到达sf_guard_register之前匹配default_index路由。 default_index和default都应该位于routing.yml文件的底部。

答案 2 :(得分:0)

您甚至应该删除2条默认路线:

default_index:
  url: /:module
  param: { action: index }

default:
  url: /:module/:action/*

因为使用它们是不好的做法,并且应该始终创建一个特定的路线。

添加路线的最佳方法是将它们预先添加到您的文件中,在最顶层添加每条新路线。

此外,在前端调试路由的一种好方法是运行:

symfony app:routes frontend

所以你会看到哪些路线是什么(及其要求,如果有的话)