Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
Je me suis mis à Zend Framework et je l'ai déjà bien en main (helper, mvc, Zend_Form ect)
Le problème est que par exemple j'ai une adresse de ce genre
http://www.monsite.com/blog/billet/id/20
ici on a 4 sous dossier ce qui n'est pas super estétique .
Je voulais savoir si il était possible, dans un premier temps, de mettre les paramètre, ici id et 20, séparer par des tirets.
Et dans un deuxième temps, de ne pas avoir à passer l'id dans l'url mais uniquement le titre du post par exemple :
http://www.monsite.com/blog/billet/montitre
Merci d'avance pour ces réponses.
Cordialement,
Clément
Dernière modification par Mr.MoOx (15-05-2008 18:22:27)
Hors ligne
http://framework.zend.com/manual/fr/zen … outer.html sera ton ami, après tu n'as plus qu'a l'adapter à ton cas spécifique avec les contraintes que ca imposent
Hors ligne
En effet c'est possible.
Regarde plus particulièrement du côté du Router_Regex.
J'ai moi même réussi à faire de jolie route dans le genre (par exemple sur le blog de mon site perso )
Hors ligne
Oui j'ai fait une route similaire.
En revanche l'ID doit quand même apparaitre pour pouvoir retrouver l'entité en question via sa clé primaire : j'ai donc rajouté le nom après l'id (dans mon cas) :
[routes]
auteurs.type = "Zend_Controller_Router_Route_Regex"
auteurs.route = "auteurs/edit\-(\d+)\-(.+)"
auteurs.defaults.controller = auteurs
auteurs.defaults.action = edit
auteurs.map.1 = id
auteurs.reverse = "auteurs/edit-%d-%s"
Hors ligne
Bonjour Dator,
Pour la forme de l'URL, regarde les messages ci dessus, il faut utiliser le router.
Ensuite si tu veux une url du type http://www.monsite.com/blog/billet/montitre, il faut mettre en place une moulinette pour "générer ton url". Si tu ne veux pas mettre l'id dans ton URL, il faut que ta chaîne "montitre" soit unique dans ta base.
En gros l'idée c'est :
- prendre le titre du message qu'un internaute est en train d'enregistrer
- enlever tous les caractères bizarres (remplacer les "é" par des "e", les ponctuations par des "_",...)
- vérifier que la chaîne générée est unique et la sauvegarder avec ton message (si elle n'est pas unique, tu peux ajouter un _1, _2,... à la fin pour la rendre unique).
- ensuite quand l'internaute appelle l'URL, tu récupères le message à partir de cette chaîne de caractères au lieux d'utiliser son id
A+, Philippe
Hors ligne
Merci beaucoup à tous !
Vous me sauvez la vie ! Serieusement je suis tombé amoureux de ce framework même si je trouve qui lui manque quelques fonctionnalités pour être parfaits (Un captcha dans le Zend_Form, des helpers Ajax et Javascript ...)
@philippe : Merci pour cette excellente idée, j'avais déjà commencer à chercher et j'ai adopté cette solution ! Google va se régaler dans les URL.
@Julien : Merci beaucoup pour ces morceaux de code qui m'ont beaucoup servit
@ndesaleux & @Mr.MoOx : Merci pour votre aide
A bientôt, Clément
Hors ligne
Petite question stupide, mon url est de ce type : http://monsite/module/controlleur/action sachant qu'en général j'ai que le controlleur index, ce qui donne monsite/module/index/index par exemple. C'est moche !!! Mais j'ai déjà bien avancé dans le développement de l'appli, alors je me pose cette (stupide) question : Est-ce que si je modifie mes urls, est-ce que les méthodes getModuleName, getControllerName, etc vont donner le bon module, controlleur et action ? Je me sers aussi du nom de module, controlleur et action afin de gérer les Acls...
Il y'a des parties de ZF que je commence à bien maitriser, mais hélas d'autres thèmes que je n'ai pas encore eu l'occasion abordée (et les routes en font parties).
Hors ligne
Oui, ça sera parfaitement reconnu normalement.
En fait c'est justement le rôle d'un routeur custom, remplir ces paramètres malgré qu'ils ne soient pas dans la requête explicitement.
Hors ligne
Bootstrap (index.php)
// Routes $CONFIG_ROUTES = new Zend_Config_Ini(CONFIG_PATH.'/routes.ini', null); $router = new Zend_Controller_Router_Rewrite(); $router->addConfig($CONFIG_ROUTES); $FRONT->setRouter($router);
routes.ini
[myThemeSelector] route = "themeSelector/:themeName/*" defaults.module = test defaults.controller = index defaults.action = route defaults.themeName = "W2Orange" [AdminControlPanel] route = "administration" defaults.module = admin defaults.controller = index defaults.action = index
Hors ligne
Pages: 1