Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
Une question me trotte en tête depuis des mois que j'utilise Zend, je lutte un peu pour mettre en place une route regex.
Je souhaite obtenir une url comme cela :
/actualites/categorie/2
Facile à faire. La où ça se complique, c'est que je souhaite rendre le "/2" facultatif, on serait donc en page 1 par défaut.
Ma route actuelle :
actu.type = "Zend_Controller_Router_Route_Regex" actu.route = "actualites/([-\w]*)(?:/(\d+))?" actu.reverse = "actualites/%s/%d" actu.map.1 = "categorie" actu.map.2 = "page" actu.defaults.page = "1" actu.defaults.module = "default" actu.defaults.controller = "actualites" actu.defaults.action = "index"
J'ai utilisé le code de la doc en ce qui concerne la parenthèse capturante sur le paramètre PAGE afin de le rendre lui et le slash avant facultatif, mais ils ne précisent pas quoi faire au niveau du reverse.
Pour l'instant, le /1 apparait forcément en fin d'url, même si je ne précise pas de paramètre page dans $this->url(), ça me gêne un peu. Est ce que cela vient du reverse ?
J'en profite pour demander : à quoi sert ce reverse url ? mes recherches google sur ce sujet m'ont pas grandement aidé.
Merci d'avance pour votre aide.
Dernière modification par supertino7 (05-02-2010 15:42:28)
Hors ligne
Je viens de voir qu'en enlevant /1 de la fin de l'URL, la route est quand même matchée.
Donc ça fonctionne, mais je ne dois pas utiliser $this->url(), et écrire directement l'URL en dur, sinon le /1 est directement apposé par défaut.
Est ce qu'il existe une solution plus propre ?
J'aimerais quand même savoir à quoi sert le reverse, si je comprends bien il est utilisé par $this->url().
Hors ligne
Pas possible du à une limitation de sprintf() (utilisé pour le reverse matching des routes je rappelle).
sprintf() ne possède pas de notion de paramètre facultatif contrairement aux expressions régulières.
Hors ligne
Julien a écrit:
Pas possible du à une limitation de sprintf() (utilisé pour le reverse matching des routes je rappelle).
sprintf() ne possède pas de notion de paramètre facultatif contrairement aux expressions régulières.
Je vois.
J'ai finalement réussi à rendre facultatif le N° de page.
actus.route = "actualites/([-a-zA-Z-0-9]*)(?:/(\d+))?" actus.reverse = "actualites/%s/%d"
avec ça, une url "actualites/categorie/1" , ou "actualites/categorie" (si je ne passe pas par $this->url() qui je rappelle rajoute automatique le /1 à la fin) matchent la route, peu importe le reverse.
Cependant, est ce qu'il est possible d'utiliser un " /* " en fin d'url, comme dans le routeur par défaut, afin que des paramètres supplémentaires du genre "/tri/date/order/desc/afficher/10" soient intégrables ?
Dernière modification par supertino7 (05-02-2010 23:12:28)
Hors ligne
Pages: 1