Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 06-10-2008 05:02:48

DarKA
Membre
Date d'inscription: 18-07-2007
Messages: 84

Zend Router Regex - Comment définir un param en tant qu'optionel

Salut,

A force de me documenter j'ai vu qu'il était interressant de définir une route en avec les expressions régulières.

J'ai définit une route :

$route = new Zend_Controller_Router_Route_Regex(
    'accueil__(\w+)__(\w+)',
    array(
        'controller' => 'accueil',
        'action'     => 'index',
        'date'     => null,
    ),
    array(
        1 => 'pays',
        2 => 'date'
    ),
    'accueil__%s__%s'
);

J'aimerais que le second paramètre soit optionel, pour cela j'ai essayé la ligne :

    'accueil__(\w+)(?:__(\w+))?',

Mais cela ne marche po sad

Quelqu'un peux t'il me donner un coup de main sur ce sujet ?

Merci d'avance.

Mais cela ne

Hors ligne

 

#2 06-10-2008 08:21:13

acharrex
Membre
Lieu: Suisse
Date d'inscription: 27-04-2008
Messages: 135

Re: Zend Router Regex - Comment définir un param en tant qu'optionel

Un simple

Code:

accueil__(\w+)(__\w+)?

ne fonctionne-t-il pas ?

Hors ligne

 

#3 06-10-2008 15:25:41

DarKA
Membre
Date d'inscription: 18-07-2007
Messages: 84

Re: Zend Router Regex - Comment définir un param en tant qu'optionel

acharrex a écrit:

Un simple

Code:

accueil__(\w+)(__\w+)?

ne fonctionne-t-il pas ?

Salut,
J'ai essayé ta solution :

Il apparais que lorsque je fais un getparam il ne sais pas faire l'explode des différents arguments:

Ansi quand je teste : "france_bordeaux__octobre_2008"

Il considere que "pays" est égale à "france_bordeaux__octobre_2008", la où il aurais du comprendre que c'est uniquement "france_bordeaux" et "date" est égale à "octobre_2008".

Hors ligne

 

#4 06-10-2008 17:25:04

meuledor
Nouveau membre
Lieu: grenoble
Date d'inscription: 04-12-2007
Messages: 6

Re: Zend Router Regex - Comment définir un param en tant qu'optionel

Je pense que ta regexp est bonne, tu devrais peut-etre tester si ce param optionel est setté dans ton controlleur d'action

Code:

function indexAction() {
    if(isset($this->_request->getParam("date"))) { .... } else { ... }
}

Ou même verifier que c'est une string et qu'il appartient a telle range de date wink

Ou implementer ta classe de routage a partir de Zend_Controller_Router_Interface (il n'y a que le methode route() a definir)

Dernière modification par meuledor (06-10-2008 17:31:15)

Hors ligne

 

#5 06-10-2008 18:26:01

DarKA
Membre
Date d'inscription: 18-07-2007
Messages: 84

Re: Zend Router Regex - Comment définir un param en tant qu'optionel

Salut,
J'ai continué à tester. Il y a un truc que l'on avais omis, c'est que le "/" serais apparu dans la deuxieme string si l'on ajoute pas un délimiteur de variable.

J'ai fini par trouver quelque chose qui marche bien:

Code:

    'accueil(?:/(\w+))?(?:/(\w+))?'

Soit:

Code:

$route = new Zend_Controller_Router_Route_Regex(
    'accueil(?:__([a-zA-Z_]+))?(?:__(\w+))?'
  , array(
        'controller' => 'accueil'
      , 'action'     => 'index'
      , 'pays'        => null
      , 'date'        => null
    )
  , array(
        1=>'pays'
      , 2=>'date'
    ),
  'accueil__%s__%s'

);

Par contre à cause de la reverse route, quand l'une de mes variables est à NULL, il me génère avec le View Helper Url, une uri du type :
exmple avec date à NULL:

Code:

  'accueil__france__'

Comme quoi, ca ne seras jamais parfais parfais.sad

Dernière modification par DarKA (06-10-2008 19:11:11)

Hors ligne

 

#6 06-10-2008 20:15:30

acharrex
Membre
Lieu: Suisse
Date d'inscription: 27-04-2008
Messages: 135

Re: Zend Router Regex - Comment définir un param en tant qu'optionel

Mais je me demandais pourquoi tu n'utilisais pas cette syntaxe :

Code:

$router = new Zend_Controller_Router_Rewrite();
$router->addRoute(
    "default",
    new Zend_Controller_Router_Route(
        "/:controller/:action/:pays/:date*",
        array(
            "controller"    =>  "accueil",
            "action"        =>  "index"
            "pays"          =>   null,
            "date"          =>   null
        )
    )
);

Si le paramètre "pays" ou "date" n'existe pas, il prendra la valeur NULL.

Ce n'est pas ce que tu souhaites ?

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