Bonjour à vous,

j'ai un problème pour rendre une route réciproque sur cake.

J'ai suivi la formation vidéo sur le routing et dans le cookbook de cake l'exemple est identique :

routes.php :

Router::connect('/tt/:id-:slug',
    array('controller' => 'pages', 'action' => 'index', 
    array('pass' => array('id','slug'), 'id' => '[0-9]+')));

vue.ctp :

echo $this->Html->link('Mon lien',array('controller' => 'pages',
                        'action' => 'index',
                                        'id' => '3' ,
                                        'slug' => 'article'));

Si j'accède à la page http://www.monsite.com/tt/3-article => ça fonctionne

Mais le lien généré par ma vue me retourne : http://www.monsite.com/pages/index/id:3/slug:article ce qui me pose un gros problème de traitement.

Si vous avez une idée pour me porter secours, ça serait vraiment sympa, et je vous remercie d'avance.

5 réponses


Back-Sephiroth
Auteur
Réponse acceptée

Merci à l4p1n0u, qui m'a aidé sur irc ...

j'ai fais une erreur de parenthèse sur ma règle :

Router::connect('/tt/:id-:slug', 'controller' => 'pages', 'action' => 'index'], 'id' => '[0-9]+', 'slug' => '[a-z0-9\-]+', 'pass' => 'id', 'slug']]);

en changeant la présentation ça m'a permis de voir mon erreur

Essaye en rajoutant dans ton Router::connect

'slug' => '[a-zA-Z0-9\-._=]+'

aprés

'id' => '[0-9]+'

Merci GyZmO pour ta réponse,

j'ai essayé cette option, et ça ne fonctionne pas non plus, j'ai même essayé sans slug, et ça ne marche pas non plus.

par contre cette route fonctionne dans les deux sens :

Router::connect('/', array('controller' => 'pages', 'action' => 'index', 'slug' => 'accueil', 'id' => '1'));

si je fais un link en passant 'slug'=>'accueil' et 'id'=>'1' j'ai bien un lien qui envoi sur la racine du site

Je suis pas sur de ça, mais dans ton routes.php, assure-toi d'avoir mis

Router::connect('/tt/:id-:slug',
    array('controller' => 'pages', 'action' => 'index',
    array('pass' => array('id','slug'), 'id' => '[0-9]+')));

avant la ligne

Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display'));

Si l'erreur persiste, alors c'est que ca vient de la déclaration de la route dans

echo $this->Html->link('Mon lien',array('controller' => 'pages',
                        'action' => 'index',
                                        'id' => '3' ,
                                        'slug' => 'article'));

ce qui serait bizarre car elle me parait bonne :x !

Moi aussi je trouve cela bizarre, j'ai cherché longtemps sur toutes les manières d'écrire ces bouts de codes.

J'ai essayé ma route en ne laissant que celle que j'ai déclaré, toutes les autres routes je les ai supprimé, et c'est toujours pareil.

Je suis entrain de tout migrer sur une autre version de PHP et si ça persiste je "downgraderai" la version de cake (j'ai mis la version 2.5.5) parceque je n'ai pas que ça comme problème bizarre : la fonction debug() ne fonctionne pas tout le temps :s , mais ça c'est un autre sujet