CakePHP中的动态路由

时间:2011-04-17 16:40:13

标签: php cakephp dynamic routing

我正在尝试为小型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']));
} 

感谢您的帮助!

2 个答案:

答案 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'];
    }
}