Bonjour à tous,
Je suis en train de faire une refonte complete de mon site, toujours en utilisant ce bon vieux cake, mais il y a une fonctionnalité que je n'arrive plus à reproduire au niveau de l'url rewritting... je m'explique:

Actuellement j'ai une action voir($id,$username) du controller Users qui a pour Route ceci:

    Router::connect(
                    '/profil/:username-:id',
                    array('controller'=>'Users','action'=>'voir'),
                    array('pass'=>array('id',"username"),"id"=>"[0-9]+")

Je creer les liens vers un profil utilisateur comme ceci:

$this->Html->Link(ucfirst(stripslashes($username_short)),array('controller'=>'Users','action'=>'voir',"id"=>$m["User"]['id'],"username"=>ucfirst(stripslashes($m["User"]["username"]))))

Par exemple pour un utilisateur dont le pseudo est "TonTon Flingueur" le lien affiché en survolant la cible est
...url.com/profil/TonTon Flingueur-12 par contre quand je clic sur le lien, l'url dans la barre de navigation est automatiquement "slugée" et devient
..url.com/profil/tonton-flingueur-12

Et si je viens changer dans l'adresse tonton-flingueur en n'importe quoi du genre ..url.com/profil/dsfsdfsdfr-12 puis que je valide, automatiquement l'url est retransformé avec le bon pseudo "slugé" ..url.com/profil/tonton-flingueur-12

Je n'ai en base aucun slug relatif aux utilisateurs et dans mes routes ou link je ne passe jamais de Slug....pourtant j'ai bien l'impression que c'est une astuce que j'avais du voir dans un des tutoriels de Grafikart, mais dont je n'arrive pas à remettre la main dessus...

Car bien entendu je fais la même chose pour l'action photos du même controller Users, avec les memes arguments et la même manière de procéder et pourtant le lien affiché est ..url.com/photo/TonTon Flingueur-12 avec espace et masjuscule et si je le modifie en ..url.com/photo/dsfsdfsdfr-12 et bien ça reste comme ceci , ça va pas automatiquement rechercher le bon pseudo...

Si quelqu'un à une idée ... :)

Merci d'avance

5 réponses


Bonjour.
Si tu n'arrives pas à trouver la réponse par toi même en lisant ton code, c'est que tu as tout simplement dû faire du copier/coller sans vraiment chercher à comprendre.
Regardes bien dans le modèle User, tu devrais y trouver la réponse à mon avis.

jey1985
Auteur

Bonjour,
j'ai déja regardé dans le modèle User ainsi que dans AppModel
(Ceci dit quand c'est une astuce qu'on met en place une fois pour une action précise et qu'on n' utilise pas tous les jours , on s'en rappel pas forcément 2 ans aprés, même si on a bien compris ce qu'elle faisait au moment de l'utiliser... )

En fait je me demande c'est à quel moment dans le processus interne de cake qu'il créer l'url de la barre de navigation à partir de la route donnée ?

Regardes dans ton action view.
C'est sans doute tout simplement une redirection, suite à une recherche sur le champ id, ce n'est pas dès que tu cliques sur le lien que celui-ci est modifié, mais après un traitement dans une fonction.
Ce n'est ni le navigateur qui va modifier ton lien, ni CakePHP via un comportement natif de celui-ci.

jey1985
Auteur

Oui des que je valide l'url en appuyant sur entrée, ça doit passer dans une fonction qui fait une redirection en récupérant le username slugé correspondant bien à l'id... mais je comprend vraiment pas à quel endroit ça peut être fait.. j'ai cherché et regardé les 'redirect' de tout le code et j'ai aussi regardé les appels à la fonction Inflector::slug ...

jey1985
Auteur

Bon ben je pense que j'ai trouvé , le seul endroit ou je redirige avec un slug , cest effectivement dans l'action... pourtant il me semblait avoir commenté ce bout de code pour faire le test...mais je suis bien forcé de constaté que c'est fait uniquement ici aprés toutes mes recherches