2010-07-17 128 views
0

在這裏,我想對路由頁面沒有顯示出其在URL操作,CakePHP的路由幫助

例如:網址爲http://localhost/brands/1/xyz

Router::connect(
    '/brands/:id/:name', 
    array(
     'controller' => 'brands', 
     'action' => 'index', 
     'id' => '[0-9]{1,}', 
     'name' => '[a-z]{1,}' 
    ) 
); 

它工作得很好....

但我需要使idname爲可選項,並嘗試過這樣做:

Router::connect(
    '/brands/:id/:name', 
    array(
     'controller' => 'brands', 
     'action' => 'index', 
     'id' => '[0-9]{1,}', 
     'name' => '[a-z]{1,}' 
    ) 
); 

according to http://book.cakephp.org/view/542/Defining-Routes

但是,當我嘗試這個網址http://localhost/brands/1它搜索操作1,但http://localhost/brands/1/xyz工作正常。

我的路由配置中是否有任何錯誤?

+0

通常,到目前爲止,具有足夠聲譽的人會偶然發現您的問題並修正格式。無論如何,我建議您使用提供的功能編輯問題並設置代碼格式,以使您的帖子更清晰。 (選擇代碼的部分,然後按下帶有1和0的圖標,或者按鍵盤上的CTRL + K。) – 2010-07-17 11:51:57

+0

是同一品牌的ID和名稱?我的意思是,這個名字是用來打印一個友好的品牌名稱?在這種情況下,當你輸入url localhost/brands/1(在這種情況下建議多一點代碼..) – Oscar 2010-07-17 12:32:48

回答

2

如果你只是希望能夠訪問http://localhost/brands/1,你需要添加這條路線:

Router::connect('/brands/:id', 
    array('controller' => 'brands','action' => 'index','id' => '[0-9]{1,}') 
); 

(也保持原來的路線)

Router::connect('/brands/:id/:name', 
    array('controller' => 'brands','action' => 'index','id' => '[0-9]{1,}','name' => '[a-z]{1,}') 
); 

(最後一個路徑對於/品牌)

Router::connect('/brands', 
    array('controller' => 'brands','action' => 'index') 
); 

然後檢查$ this-> params ['id']和$ this-> params ['name'] in控制器。如果需要,重定向到正確的網址(如果網頁是相同的,你總是希望在網址中有這個名字,這對SEO很有用)。

+0

但是應該是可選的...如果我像這樣路由,那麼名稱需要添加到URL當我嘗試訪問/品牌/將拋出錯誤........ – RSK 2010-07-19 04:26:02

+0

更新了答案。您需要一條額外的路線進入/品牌。 – Oscar 2010-07-22 08:08:53

1

指定第二個路由,省略可選參數。