Cakephp 2 : Route

Par massadu33, il y a 8 ans


Bonjour à tous,

Je me pose une question concernant les routes de Cakephp (2). En effet je souhaiterais avoir une url du type monsite.com/article-slug

donc dans mon fichier route j'ai :

Router::connect(':slug', array('controller' => 'post', 'action' => 'watchPost'), array( 'pass' => array('slug') ));

mon Controller :

public function watchPost($id=null,$slug=null){ ... $post = $this->Post->find('first',array( 'conditions' => array('post.id' => $id) )); ... }

Et enfin ma vue :

<?= $this->Html->link(__('Afficher'),array('controller'=>'post','action'=>'watchPost','id'=>$v['id'],'slug'=>$v['slug']));?>

Mon problème se situe au niveau de ma route, il veut obligatoirement prendre en compte mon id. Y'a -t-il un moyen de contourner cela juste de chercher mon article avec mon id mais au niveau de ma route n'afficher que mon slug ?

Merci pour vos lumières

3 réponses

massadu33, il y a 8 ans

OK merci pour cette réponse. je voulais garder la condition avec l'ID mais si c'est pas possible je ferais autrement :)

Kareylo, il y a 8 ans

La solution est assez simple : Ne plus prendre l'ID dans ton action et ne plus la passer dans les URL.
Sinon, ajouter l'ID dans la route

romses, il y a 8 ans

essaye ceci:

Router::connect('/Posts/:slug', ['controller' => 'Posts','action'=>'watchPost'],['pass' => ['slug','id'],'slug'=>'[a-z0-9\-]+'])