Сначала вам нужно настроить маршрут в routes.php
:
Router::connect('/favours/:id',
array('controller' => 'favors', 'action' => 'view'),
array('id' => '[0-9]+', 'pass' => array('id')));
Router::connect('/favours/:id/:slug',
array('controller' => 'favors', 'action' => 'view'),
array(
'id' => '[0-9]+',
'slug' => '[A-Za-z0-9\._-]+',
'pass' => array('id', 'slug')
));
Тогда я бы порекомендовал добавить в модель Favor метод, который обрабатывает создание параметра :slug
, так как вам придется использовать его из разных мест, и вы можете захотеть изменить его работу позже:
public static function slug(array $favour) {
// good enough for now, might want to change this later
return Inflector::slug($favour['title']);
}
Затем, когда вы делаете ссылку, делайте это так:
array('controller' => 'favours', 'action' => 'view',
'id' => $favour['Favour']['id'], 'slug' => Favour::slug($favour['Favour']))
Ваше действие контроллера просто выглядит так:
public function view($id, $slug) {
$favour = $this->Favour->find('first', array('conditions' => array('Favour.id' => $id)));
if (!$favour) {
$this->cakeError('error404');
}
if (Favour::slug($favour['Favour']) != $slug) {
$this->redirect(array('id' => $id, 'slug' => Favour::slug($favour['Favour'])));
}
$this->set(compact('favour'));
}