Problème de réciprocité sur le routing

Par Back-Sephiroth, il y a 11 ans


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

ker0x, il y a 11 ans

Essaye en rajoutant dans ton Router::connect

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

aprés

'id' => '[0-9]+'
Back-Sephiroth, il y a 11 ans

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

ker0x, il y a 11 ans

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 !

Back-Sephiroth, il y a 11 ans

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

Back-Sephiroth, il y a 11 ans

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