2010-07-28 60 views
0

我在app/frontend/config/routing.yml如下:Symfony的路由问题,路径被忽略

 
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路线,我得到这个:

行动“注册/指数”不存在。

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

欢迎任何想法,谢谢!

回答

4

与Jeremy的回答线:

因为你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置于顶部。

只是我5毛钱 - 希望你觉得它有用;-)

+0

非常感谢你,你的解决方案的作品,你的建议是相当精明的。 :) – Emerick 2010-07-29 13:58:51

1

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

0

你应该甚至删除了2默认路由:

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

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

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

添加路线的最佳方法是将它们预先提交给您的文件,并在最上方添加每条新路线。

此外,一个很好的方式来调试在前台你的路由是运行:

symfony app:routes frontend 

所以你会看到至极路线maches什么(它要求如有)