我正在尝试为小型CMS设置动态路由。有没有正确的方法怎么做?我在某个地方找到了这个解决方案,但说实话,我对此并不满意。 CMS有其他内容类型,因此为每个模型定义这个对我来说似乎不对。
$productsModel = ClassRegistry::init('Product');
$products = $productsModel->find('all');
foreach($products as $product){
Router::connect('/produkty/:id/'.$product['Product']['url'], array('controller' => 'products', 'action' => 'view',$product['Product']['id']));
}
感谢您的帮助!
答案 0 :(得分:2)
无需做任何复杂的事情:)
在routes.php中:
Router::connect('/produkty/*', array('controller'=>'products', 'action'=>'view'));
在products_controller.php中:
function view($url = null) {
$product = $this->Product->find('first', array('conditions'=>array('Product.url' => $url)));
...
}
答案 1 :(得分:2)
Yop,
您无需为模型数据库中的每个条目定义路线。路线动态。有许多方法可以定义路线,但更容易将args传递给行动,就像它们来了一样。
routes.php
Router::connect('/produkty/*', array('controller' => 'products', 'action' => 'view'));
products_controller.php文件
class ProductsController extends AppController{
public function view($id){
//do anything you want with your product id
}
}
您也可以使用命名args
routes.php
Router::connect('/produkty/:id/*', array('controller' => 'products', 'action' => 'view'), array('id' => '[0-9]+'));
products_controller.php文件
class ProductsController extends AppController{
public function view(){
//named args can be find at $this->params['named']
$productId = $this->params['named']['id'];
}
}