2011-07-06 21 views
1

我使用url_for('module/myaction/id/3')在修改的管理生成器屏幕中創建鏈接。每當我做出新動作並嘗試鏈接到url_for ('module/action/id/3')時,我都會得到/module/myaction/action爲什麼url_for('module/action/id/3')不起作用

當我嘗試url_for('module/3/myaction')我得到了同樣的結果。

然而,當我使用url_for('module/myaction?id=3')我得到預期的結果:模塊/ 3/myaction

我在我的路由文件只生成的默認管理路由規則。

預計這種行爲?

回答

6

是的,這是預期的......在某種意義上,傳遞外部URL會產生意想不到的結果。

你應該傳遞一個內部URIurl_for內部URI被寫成如下形式:

@route_name?param=value

moduleName/actionName?param=value

也可以通過表示參數爲內部URL分別在這些情況下使用路由名稱和對象(如果它的對象路由或路由集合),它將如下所示:

url_for('route_name', params);

其中params是路線所期望的對象(通常是一個Doctrine或Propel模型實例)或一個參數數組。

這些內部URI將被路由系統轉換爲外部URL。你會得到不正確的結果,因爲你試圖傳入外部URL,這沒有任何意義,因爲如果你知道該url,那麼沒有理由路由它:-)