2013-07-03 98 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,,你不需要做那么多的改变,但它是一个很好的指导。