Bonjour à toutes et à tous,
Un petit soucis de routes que je n'arrive pas à résoudre pouvez vous m'aider svp :
Routes.php :
Router::connect('/actualites/:id-:slug',array('controller' => 'articles', 'action' => 'lire'),array('pass' => array('id','slug'), 'id' => '[0-9]+', 'slug' => '[a-z0-9\-]+'));
ArticlesController.php :
public function lire($id = null, $slug = null) {
$this->Article->contain('Tag','Commentaire');
$data = $this->Article->find('first',array(
'conditions' => array('id' => $id)
));
if($slug != $data'Article']'slug']){
$this->redirect(array('controller' => 'articles', 'action' => 'lire', $article'Article']'id'], $article'Article']'slug']),301);
}
$this->set('article', $data);
}
Je ne vois pas où ça cloche ...
haaa baj oui, je comprends mieux !!
les :id-:slug dans la définition de la route, signifie que ce sont des arguments nommés, tu dois donc avoir :
array(…]'lire', 'id' => $articleId, 'slug' => $articleSlug));
l'argument 'pass' de la route signifie que tu donnes en paramètres, dans l'ordre défini les arguments id et slug (les noms des arguments dans les fonctions ne portent pas nécessairement le même nom
tout compris ? je ne suis pas sûr d'avoir été très clair
ok, alors je te donne la solution :…
désolé pour l'ironie, c'est quoi le problème de ton code ?
Ah oui j'ai oublié de préciser lol cette route ne s'affiche pas correctement :
articles/lire/12/titre
Attendu :
actualites/12-titre
je vois pas trop d'où ca peut venir, cependant, je sais que lorsque je mets une règle pour le slug, les routes ne fonctionnent pas…
as tu d'autres routes avant ? parce que si c'est le cas et qu'elles correspondent, les suivantes sont ignorées
Oui voici les autres mais elle ne devraient pas coincider ...
Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));
Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display'));
Router::connect('/actualites/:id-:slug',array('controller' => 'articles', 'action' => 'lire'),array('pass' => array('id','slug'), 'id' => '[0-9]+', 'slug' => '[a-z0-9\-]+'));
Router::connect('/actualites', array('controller' => 'articles', 'action' => 'index', 'compte' => false));
Router::connect('/compte', array('controller' => 'utilisateurs', 'action' => 'dashboard', 'compte' => true));
Router::connect('/compte/connexion', array('controller' => 'utilisateurs', 'action' => 'connexion', 'compte' => false));
Router::connect('/compte/inscription', array('controller' => 'utilisateurs', 'action' => 'inscription', 'compte' => false));
Router::connect('/compte/deconnexion', array('controller' => 'utilisateurs', 'action' => 'deconnexion', 'compte' => false));
ouai, effectivement… essaye de virer la contraintes sur le slug pour voir si ca marche mieux… quand je fais mes routes et que je mets ces contraintes, ca marche pas… je pourrais pas t'aider plus, par contre, si tu trouves la solution, dis moi :)
Jai essayer .. mais sans succès. J'ai même tester je l'enlever et laisser que l'id comme ça mais en vain.
Router::connect('/actualites/:id',array('controller' => 'articles', 'action' => 'lire'),array('pass' => array('id'), 'id' => '[0-9]+'));
mh… je vois pas trop là comment définis tu tes liens ? avec un array('controller' => …) ou /articles/lire/12/titre ? si c'est le deuxieme cas, c'est normal que ca ne marche pas !
Voici la syntaxe que j'utilise :
<p><?php echo $this->Html->link('Lire la suite', array('controller' => 'articles', 'action' => 'lire', $article'Article']'id'], $article'Article']'slug'])); ?></p>