Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonsoir,
Ce soir, je rencontre un problème étrange... J'aimerais réaliser une route de ce type : 'news-:id-:title.html'
Et il se fait que le :id et le :title contenu dans la route n'est pas transformé par les valeur que je lui passe. Par contre, si je modifie ma route en remplaçant les tirets par des "/", cela fonctionne.
A quoi cela est-du ? Est-ce que j'ai une modification de configuration à faire ?
Merci d'avance.
Hors ligne
Quel type de route utilises-tu? Je crois qu'il faut utiliser un regexp pour cela. À confirmer.
Hors ligne
Bonsoir à tous,
Je me permets de reprendre mon post initial pour remonter un autre problème. J'ai deux routes comme ceci :
routes.categorypage.type = "Zend_Controller_Router_Route_Regex" routes.categorypage.route = "(.+)-(\d+)-(\d+).html" routes.categorypage.defaults.module = "default" routes.categorypage.defaults.controller = "category" routes.categorypage.defaults.action = "index" routes.categorypage.map.1 = "name" routes.categorypage.map.2 = "id" routes.categorypage.map.3 = "page" routes.categorypage.reverse = "%s-%d-%d.html" routes.category.type = "Zend_Controller_Router_Route_Regex" routes.category.route = "(.+)-(\d+).html" routes.category.defaults.module = "default" routes.category.defaults.controller = "category" routes.category.defaults.action = "index" routes.category.map.1 = "name" routes.category.map.2 = "id" routes.category.reverse = "%s-%d.html"
Quoi que je fasse, il passe toujours par la deuxième route (category). C'est à dire que si j'ai l'url suivante : cat-1-2.html, il me prend la seconde qui n'a que 2 paramètres et non la première qui a bien 3 paramètres.
Je n'arrive pas à comprendre pourquoi il ne match pas avec la première
Merci d'avance
Hors ligne
le router fonctionne avec une pile (FIFO), et aussitôt qu'il trouve une route qui convient il arrête de chercher, donc il faudrait que tu inverses tes routes dans ton fichier.
Hors ligne
Les routes sont ajoutées dans l'ordre qu'ils sont dans ton fichier, donc la première route se retrouve en dessous de la pile et la dernière au dessus de la pile. Donc dans ton cas, le router analyse category en premier et ensuite categorypage. Essaie:
routes.category.type = "Zend_Controller_Router_Route_Regex" routes.category.route = "(.+)-(\d+).html" routes.category.defaults.module = "default" routes.category.defaults.controller = "category" routes.category.defaults.action = "index" routes.category.map.1 = "name" routes.category.map.2 = "id" routes.category.reverse = "%s-%d.html" routes.categorypage.type = "Zend_Controller_Router_Route_Regex" routes.categorypage.route = "(.+)-(\d+)-(\d+).html" routes.categorypage.defaults.module = "default" routes.categorypage.defaults.controller = "category" routes.categorypage.defaults.action = "index" routes.categorypage.map.1 = "name" routes.categorypage.map.2 = "id" routes.categorypage.map.3 = "page" routes.categorypage.reverse = "%s-%d-%d.html"
Hors ligne
Hmm d'accord
Mais j'obtiens cette exception alors :
Exception de type Zend_Controller_Router_Exception Cannot assemble. Too few arguments? envoyée dans /home/sites/devtest/www/portails/ZendFramework-1.7.3PL1/library/Zend/Controller/Router/Route/Regex.php à la ligne 184
Alors que c'est bizarre, j'ai bien mes 3 arguments dans l'url.
Dans la trace, je vois bien qu'il ne détecte que 2 arguments à première vue. Il ne me trouve pas le troisième (page)
Hors ligne
je crois que c'est un problème avec ton regex, il faudrait que tu le teste et l'ajuste en conséquence:
http://www.regular-expressions.info/jav … ample.html
Hors ligne
je crois qu'il faut mettre un \ devant .html. Ce qui donne :
routes.category.route = "(.+)-(\d+)\.html" routes.categorypage.route = "(.+)-(\d+)-(\d+)\.html"
En tout cas, c'est ce que j'ai mis.
Hors ligne
J'ai déjà eu se problème et il provenait de l'aide de vue url, lorsque je lui envoyais les paramètres avec leur nom comme dans ton cas "name", "id", "page" ça ne fonctionnait pas, par contre si tu envoies un tableau sans clé dans le bon ordre, ça devrait fonctionner.
$this->url(array(tonName, tonId, taPage), nomDeLaRoute);
Je ne sais pas d'où vient cette erreur.
Hors ligne