我想在我的cakephp网站上进行动态路由,我有一个名为products的表。最初我为每个产品做了静态路由,但是当添加新产品时,会产生问题,导致有人必须手动输入路由每个新产品的路径,似乎不是非常用户友好..最初我做了
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产品的等等。但是如果有人在一段时间后添加了另一个产品,他们也必须更改路径文件。有没有可以保持动态的选项?我的view()动作将id作为参数,如何从函数视图()中获取url中另一个称为productname的字段。是否可以通过'named'参数来实现。我从蛋糕中经过'Routing'面包店,但这一切似乎让我很困惑。有人可以帮助我吗?
答案 0 :(得分:0)
对我来说,你想做一些slug路由。基本上,您的路线需要像这样
Routing::connect('/portfolio/:slug',
array( 'controller'=>'products', 'action'=>'view'),
array('pass'=>array('slug'));
我称它为slug,因为它是一个更熟悉的术语,但您可以将其命名为:product-name
或任何您想要的名称。如果你搜索“cakephp slug”,你会发现你想要的更多指导。
无论如何,该路线会将portafolio/good-product
等网址指向
ProductsController->view('good-product')
在视图操作中,您可以将该产品名称(slug)转换为id。为此,在模型中创建一个函数,如slugToId
,并从控制器中调用它
public function view($slug) {
$productID = $this->Producto->slugToId($slug);
}
在模型中,一个简单的查找将对slugToId
函数执行。嗯,这个功能不是必须在模型中,但是更好的练习,特别是如果你想在其他模型中做slug,你可以重用这个功能。
现在,您可以使用反向路由,因此可以调用
$this->redirect(array('controller'=>'products',
'action'=>'view',
'slug'=>'super-awesome-product'))
将调用网址cake.com/portfolio/super-awesome-product
。
阅读slu {this tutorial,你不需要做那么多的改变,但它是一个很好的指南。