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


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

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

essaye ceci:

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