2013-07-03 73 views
0

我想在我的cakephp網站中做動態路由,在那裏我有一張名爲products的表。最初,我爲每個產品做了靜態路由,但是當添加新產品時,會產生問題會有人手動輸入每個新產品,該犯規的路由路徑似乎非常用戶friendly..Initally我做在添加新產品時在cakephp中動態路由

Routing::connect('/portfolio/product_name1',array('controller'=>'products','action'=>'view',1)); 
Routing::connect('/portfolio/product_name2',array('controller'=>'products','action'=>'view',2)); 
Routing::connect('/portfolio/product_name3',array('controller'=>'products','action'=>'view',3)); 

等對於x products.But如果有人一段時間後,又增加了產品,他們將不得不在路線文件中更改。有沒有可以保持動態的選項?我的view()動作以id作爲參數,我怎麼能從函數view()中得到另一個在url中被稱爲productname的字段?是否可以通過'named'參數來做到這一點。我通過蛋糕的'路由'麪包店,但這一切似乎都讓我感到困惑。有人可以幫我解決這個問題嗎?

回答

0

對我來說,你想做一些彈塞路由。基本上,你的路線將需要這樣

Routing::connect('/portfolio/:slug', 
        array('controller'=>'products', 'action'=>'view'), 
        array('pass'=>array('slug')); 

我打電話讓其麻痹,因爲它是更爲熟知的術語,但你可以將其命名:product-name或任何你想要的。如果您搜索「cakephp slug」,您會在所需內容中找到更多指導。

不管怎麼說,這條路線將直接像portafolio/good-product的URL來

ProductsController->view('good-product') 

並在視圖操作,可以把這一產品名稱(塞),一個ID。對於在模型中創建一個功能,如slugToId和控制器

public function view($slug) { 
    $productID = $this->Producto->slugToId($slug); 
} 

和模型中一個簡單的查找會爲slugToId功能做調用它。 Ehm,它不是模型中該功能的必要條件,但是更好的做法,特別是如果您想在其他模型中使用slug,可以重新使用該功能。現在

,與您還可以使用反向路由,所以調用

$this->redirect(array('controller'=>'products', 
         'action'=>'view', 
         'slug'=>'super-awesome-product')) 

將調用URL cake.com/portfolio/super-awesome-product

閱讀this tutorial slu,,你不需要做那麼多的改變,但它是一個很好的指導。