2012-12-15 73 views
0

我有這樣的結構:CakePHP的躲在URL動作名稱,同時傳遞參數

  • example.com/myController的/索引/ MyGoodPage /最大/
  • example.com/myController的/索引/ MyBestPage /最佳/
  • example.com/myController的/索引/ MyFancyPage/lowprice/

但我不希望我的觀衆看到「指數」二字,因爲它沒有提供任何更多的信息,他/她的。我需要我的網址是這樣的:

  • example.com/myController的/ MyGoodPage /最大/
  • example.com/myController的/ MyBestPage /最佳/
  • example.com/myController的/ MyFancyPage/lowprice/

但要做到這一點在默認的Cake-way中,我需要創建單獨的動作來處理我的情況。我不想創建所有操作,我需要創建一個操作,然後顯示有關request->params['pass']的相關內容。

可能嗎?

回答

2

這是路由的工作:http://book.cakephp.org/2.0/en/development/routing.html 這實際上就是默認情況下爲核心進行PagesController的display方法:

Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display')); 

你可以爲你的控制器做同樣的

Router::connect('/controller_name/*', array('controller' => 'controller_name', 'action' => 'index')); 
1

你已經選擇了一個答案,但這是一個更好的答案。

Router::connect('/controller_name/*', array(...));如上所示將匹配任何內容,因此您不能再訪問/controller_name/delete或任何其他方法。

您應該選擇一條較不貪心的路線,如Router::connect('/contorller_name/:something', array(...));,並指定一個正則表達式,例如[maximum | optimum | lowprice]。

這樣做,你也可以指定要傳遞給控制器​​的something,這將是可作爲$this->request->something

+0

謝謝。將所有動作參數添加到正則表達式中不會佔用太多計算時間。怎麼寫這樣的東西? 「使用**顯示**動作,如果動作名稱不是動作1或動作2」 – trante

+0

正則表達式有'不' – dogmatic69