Bonjour,
je suis entrain de refléchir à un sujet mais je ne sais pas comment mettre ça en place, je voudrais donner la possiblilité aux utilisateur d'un site de creer une adresse (url) pour leur page profile genre facebook.com/nomutilisateur.
Quelqu'un pourrait m'expliqur comment mettre cette technique en place?.merci

10 réponses


Tu veux que l'utilisateur choisisent l'url ? ou que tu la génère a partir de son nom?

Si tu veux le generer a partir du nom créer un behavior sluggable avec l'inflector slug, si tu veux qu'ils choisissent eux même tu fais un champ slug et tu met une règle de validation pas de majuscule, ni minuscule, ni de caractères ...

wenz
Auteur

bonjour DubleYu merci pour l'info, je veux géner ça à partir de leur nom, après avoir créer le behavior sluggable avec l'inflector, comment le lien sera généré à partir du nom de domaine.merci

Normalement dans ta base de données tu as un champ slug ou autre avec par exemple dubleyu, de là tes routes seront du style

$routes->connect('/profile/:slug', ['controller' => 'Users', 'action' => 'view']);

et don tu auras monsite.fr/profile/dubleyu/

wenz
Auteur

ok merci bcp

L'autre question à se poser c'est comment faire pour faire une route de ce type "/:slug" et non "/profile/:slug" afin d'obtenir www.monsite/monpseudo

Pour ma part j'ai généré cette route particulière tout à la fin du fichier routes.php en plusieurs étapes
1 - lister toutes les controllers et les plugins (app|users|pages|...)
2 - lister toutes les premières parties des routes (login|logout|welcome|settings|...)
3 - je fais ma route "/:username" en passant en paramètre nommé "username" qui doit etre [a-zA-Z0-9]+ et qui ne doit pas être dans l'une des deux listes ci dessus ( pour éviter les conflits du genre un user à mis un pseudo = "login" )

Cette solution ne me semble pas très élégente, mais je n'ai pas trouvé mieux pour avoir le paramètre sur une route racine "/:username"
Si quelqu'un à une autre solution, je suis preneur !

Ba tu check si le slug à retourne bien un id, dans la table users et tu n'auras pas de conflits ...

@ DubleYu : le problème se situe bien plus tot, car il faut écrire la route. Tu fais appel au model User dans routes.php ??

Ba le fichiers routes va chercher lui même les classes !
Tu lui renseignes en action profile et en controller users

lol autant pour moi, je sais comment on met en place une route :

Router::connect('/profile/:username', array('controller' => 'profiles', 'action' => 'index', 'admin' => false), array('pass' => array('username'), 'username' => '[a-zA-Z0-9]+'));

Ca on est d'accord ca fonctionne parfaitement.

Sauf que moi je cherche à faire /:username et non pas /profile/:username , du coup le router plante car il y a un conflit.
Dans le navigateur on tappe "http://localhost/login" le router va chercher quoi ? :

Router::connect('/:username', array('controller' => 'profiles', 'action' => 'index', 'admin' => false), array('pass' => array('username'), 'username' => '[a-zA-Z0-9]+'));
Router::connect('/login', array('controller' => 'ursers', 'action' => 'login', 'admin' => false));

C'est Cake2 ok et normalement il devrait aller chercher la page login dans le controller ursers

Tu peut me montrer le controller Profiles@index ?