2012-05-29 103 views
2

牢記這短暫的甜蜜:我可以很容易地指定像在routes.php文件下面並進行所需的形式工作的網址:反向路由/:控制器/:ID

Router::connect('/:controller/:id', 
    array('action'=>'item'), 
    array('id'=>'[0-9]+') 
); 

然而,路線仍然由Cake生成爲'/:controller/item /:id'。有沒有一種簡單的方法讓Cake的反向路由使URL不包含動作?或者我只需要通過我的應用程序並用「/:controller/$ id」手動替換相關數組?

+0

你能舉幾個例子你正試圖扭轉這種不工作?它是否正確地路由在第一位?這一切對我來說都很好。 – jeremyharris

+0

這種類型的數組傳遞給HTML的「鏈接:\t陣列(「控制器」 =>「:控制器」,「動作」 =>「項目」,$ ID),似乎給我一個鏈接到/控制器/項目/ $ ID。我不知道這是否是預期的,而我只是努力嘗試 -/controller/$ id表單中的路徑確實有效。我找到了一個可能的解決方案,我將在後面發佈,但任何真正瞭解Cake路由工作方式的人都可以隨時啓發我,以瞭解我應該如何做這種事情! – thesunneversets

+0

'array('controller'=>'vid​​eos','action'=>'item',$ id)'應該匹配成爲'/ videos/$ id'。您是否在HTML鏈接中使用':controller'來嘗試,因爲這不起作用。創建鏈接時仍需要定義控制器。反向路由正在將'/ videos/$ id'改爲'array('controller'=>'vid​​eos','action'=>'item',$ id)',這也應該起作用。 – jeremyharris

回答

1

這是一個可能的解決我的問題 - 如果我指定的路線,像這樣:

Router::connect('/videos/*', 
    array('controller'=>'videos', 'action'=>'item'), 
    array('pass'=>array('id')) 
); 

它似乎反向路由此回/視頻/ $ ID。

我仍然不知道這和我原來的嘗試之間的區別是什麼,雖然,原因,原來是(或在某些情況下)更難路線!所以任何人都可以用我的方式發送任何Cake路由專業知識,仍然非常受歡迎。

+0

你,我的男人,做得對,沒有專家需要。正如[本書的例子解釋](http://book.cakephp.org/2.0/en/development/routing.html#passing-parameters-to-action),這就是要走的路。 對整個網站的鏈接更改小小的建議 - 如果你想改變鏈接的創建方式,您可能要重寫主AppHelper ::鏈接或AppHelper ::網址的方法。 你原來的路線可能不工作,因爲你的/:控制器/:控制器/:動作/:身份證之後核心的/定義ID - 第一個優先。 –