Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 05-02-2010 15:41:31

supertino7
Membre
Date d'inscription: 21-02-2009
Messages: 113

[Zend_Route] route Regex : rendre un paramètre facultatif

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 :

Code:

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

 

#2 05-02-2010 16:33:29

supertino7
Membre
Date d'inscription: 21-02-2009
Messages: 113

Re: [Zend_Route] route Regex : rendre un paramètre facultatif

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

 

#3 05-02-2010 18:08:38

Julien
Membre
Date d'inscription: 16-03-2007
Messages: 501

Re: [Zend_Route] route Regex : rendre un paramètre facultatif

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

 

#4 05-02-2010 23:10:02

supertino7
Membre
Date d'inscription: 21-02-2009
Messages: 113

Re: [Zend_Route] route Regex : rendre un paramètre facultatif

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.

Code:

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

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages