Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
Je suis en train de me pencher sur les routes de ZF (je découvre, soyez indulgents ^^), et j'avoue etre un peu perdu.
Ce que j'ai :
Une architecture modulaire : Frontend, Admin, Annonce, Admin-Intervenant1, Admin-Intervenant2, etc..
En gros, c'est un site ou l'on dépose des annonces (une annonce a un code du type [a-z-]+)
Pour mes liens je fait appel a une fonction maison qui utilise la fonction assemble() du routeur.
Ce que je voudrais :
h.ttp://www.monsite.com/Annonce/index/index/code/mon-annonce
devienne
h.ttp://www.monsite.com/mon-annonce
http://www.monsite.com/*
devienne
h.ttp://www.monsite.com/motclef/*
h.ttp://www.monsite.com/Admin/
reste
h.ttp://www.monsite.com/Admin/
(+ la gestion des langues )
Voici ma config actuelle :
routes.ini
[url_rewriting] ;ANNONCE routes.annonce.type = "Zend_Controller_Router_Route" routes.annonce.route = ":code/*" routes.annonce.defaults.module = "Annonce" routes.annonce.defaults.controller = "index" routes.annonce.defaults.action = "index" routes.annonce.defaults.lang = "fr" routes.annonce.defaults.code = "" routes.basic2.type = "Zend_Controller_Router_Route" routes.basic2.route = "motclef/:lang/:module/:controller/:action/*" routes.basic2.defaults.module = "Frontend" routes.basic2.defaults.controller = "index" routes.basic2.defaults.action = "index" ;map lang? routes.basic.type = "Zend_Controller_Router_Route" routes.basic.route = "motclef/:module/:controller/:action/*" routes.basic.defaults.module = "Frontend" routes.basic.defaults.controller = "index" routes.basic.defaults.action = "index" routes.basic.defaults.lang = "fr"
Dans mon bootstrap :
$router = Zend_Controller_Front::getInstance()->getRouter(); $config = new Zend_Config_Ini(BP . DS . 'app' . DS . 'etc' . DS . 'routes.ini', 'url_rewriting'); $router->addConfig($config, 'routes');
Mon probleme :
Par exemple, sur la page http://www.monsite.com/mon-annonce, mes appels a assemble() me retourne des urls de la forme :
/mon-annonce/module/Annonce/controller/index/action/index/param1/value1/param2/value2
J'aimerais avoir :
/mon-annonce/param1/value1/param2/value2
Avez vous une idée ?
Hors ligne
si le champ "mon-annonce" est une variable, alors ça sera pas facile.
je te conseille de mettre une constante avant : site.com/annonces/Mon-Annonce
Hors ligne
Oui c'est bien une variable...
Le problème est qu'il en a été défini ainsi avec le client.
Si il n'y a pas moyen avec les routes (ce qui serait dommage), je réécrirais à l'ancienne avec un htaccess..
Personne n'a de solution?
Hors ligne
Ta réécriture avec htaccess ne ferais rien de mieux qu'une route avec Zend_Controller_Router_Route_Regex
Il te faudrait dans tous les cas mettre quelques choses de communs à tes urls, car avec une regex ( que ce soit dans ton htaccess, ou avec le router du zf ) il te faut pouvoir la différencier.
Après tu peux par exemple faire monsite.com/mon-annonce+(id) et faire un regex là dessus.
De plus tu ne pourra pas faire de la réécriture classique car tu ne pourra pas faire un redirection vers le index.php avec une autre url. Je sais pas si tu saisi bien le principe du router qui est de "router" à partir d'un url depuis l'appel du bootstrap. Quoi que en testant index.php/annonces/index/index/monannonce. M'enfin une solution intégré au Framework serait plus propre, maintenable et évolutive.
Hors ligne
Oui c'était mon idée, de faire un rewritecond spécial pour ce cas la, et ensuite ne pas utiliser la fonction url().
Et en effet, je ne veux pas du tout en arriver la, mais j'ai vraiment besoin de ce resultat.
Et en fait, j'y suis arrivé avec ma configuration que j'ai présenté ci-dessus.
Le problème ( = il m'ajoute le module, le controller et l'action dans l'url sous la forme /module/NomModule/controller/NomCont/action/Action ) ne semble pas venir de la.
Je vais trouver un exemple plus simple du probleme...
Voila : Admettons, je veux réécrire un nom de module (par exemple, je veux changer l'url pour arriver a l'admin)
routes.admin.route = "legendary/:controller/:action/*" routes.admin.defaults.module = "Admin" routes.admin.defaults.controller = "index" routes.admin.defaults.action = "index"
lors de mes appels a assemble, j'obtiens des urls de la forme :
/legendary/index/login/module/Admin (par exemple)
à la place de
/legendary/index/login
En fait, c'est ca mon vrai problème et ca ne dépend meme pas de ma problematique d'annonces !
Hors ligne
Le problème ne survient pas si je ne specifie pas :
'module' => 'Admin'
dans l'array du premier parametre d'assemble().
Mais le but n'est pas de modifier tous les appels a la fonction url()...
Je ne comprends vraiment pas;
Personne n'a eu ce probleme ?
Hors ligne
Pages: 1