2010-07-28 99 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什麼(它要求如有)