Динамическая маршрутизация в CakePHP - PullRequest
3 голосов
/ 17 апреля 2011

Я пытаюсь установить динамические маршруты для небольших 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 ]

2 голосов
/ 17 апреля 2011

Йоп,

Вам не нужно определять маршрут для каждой записи в вашей модели DB. Маршруты есть динамика. Существует много способов определения маршрутов, но проще передать аргументы действию, как они приходят.

rout.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
    }
}

Вы также можете использовать именованные аргументы

rout.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'];
    }
}
2 голосов
/ 17 апреля 2011

Нет необходимости делать что-либо сложное:)

В маршрутах.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)));
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...