Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 22-09-2014 10:26:07

kitensei
Nouveau membre
Date d'inscription: 16-09-2014
Messages: 7

Routage par defaut

Bonjour,

il y a une chose dan le routage ZF2 que je ne suis pas sur de comprendre, prenons mon cas:

Code:

    'router' => array(
        'routes' => array(
            'hostbill-api' => array(
                'type'    => 'Literal',
                'options' => array(
                    'route'    => '/api/hostbill',
                    'constraints' => array(
                        'service' => '[a-zA-Z][a-zA-Z0-9_-]*',
                        'call'    => '[a-zA-Z][a-zA-Z0-9_-]*',
                    ),
                    'defaults' => array(
                        '__NAMESPACE__' => 'Hostbill\Controller',
                        'controller'    => 'Api',
                        'action'        => 'index',
                    ),
                ),
                'may_terminate' => true,
                'child_routes' => array(
                    'hostbill-api-service' => array(
                        'type'    => 'Segment',
                        'options' => array(
                            'route'    => '[/:service[/:call]]',
                            'constraints' => array(
                                'service' => '[a-zA-Z][a-zA-Z0-9_-]*',
                                'call'    => '[a-zA-Z][a-zA-Z0-9_-]*',
                            ),
                        ),
                    ),
                    'hostbill-api-hook' => array(
                        'type'    => 'Segment',
                        'options' => array(
                            'route'    => '/hook[/:action]',
                            'constraints' => array(
                                'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
                            ),
                            'defaults' => array(
                                '__NAMESPACE__' => 'Hostbill\Controller',
                                'controller'    => 'Hook',
                                'action'        => 'index',
                            ),
                        ),
                    ),
                ),
            ),
        ),
    ),

les 2 premières routes marchent parfaitement, mais la 3eme me retourne une 404 dans les cas suivants:

http://host/api/hostbill/hook/xxx -> pas de fonction xxxAction() dans le controlleur -> 404
http://host/api/hostbill/hook/yyy -> fonction yyyAction() présente dans le controlleur -> OK

j'aimerais, si possible, appeler la bonne méthode action, sauf si elle n'est pas présente, dans ce cas là appeler le défault (indexAction), est ce possible ?

Hors ligne

 

#2 22-09-2014 11:50:56

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Routage par defaut

Salut, depuis une route je vois pas trop comment tu peux le gérer. Tu peux le faire via un listener qui écoute l'évènement dispatch error (il me semble que c'est celui là qui renvoi vers la 404) et dans le cas où ça correspond à ton besoin tu rediriges vers le bon contrôleur et la bonne action.

Hors ligne

 

#3 22-09-2014 12:20:31

kitensei
Nouveau membre
Date d'inscription: 16-09-2014
Messages: 7

Re: Routage par defaut

donc le default ne sert pas à gérer une route non trouvée ? (j'ai pas trop compris l'intérêt du default en fait)

Hors ligne

 

#4 22-09-2014 12:33:25

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Routage par defaut

Non le default permet de renseigner les paramètres par défaut dans le cas où ils sont non renseignés. Personnellement je fais très peu de route segment (c'est les plus gourmande), je m'en sers uniquement lorsque j'ai un id ou un paramètre à passer dans l'url du coup [:action] n'est jamais présent dans mes url et le default permet de spécifier l'action wink.

Hors ligne

 

#5 22-09-2014 13:24:46

kitensei
Nouveau membre
Date d'inscription: 16-09-2014
Messages: 7

Re: Routage par defaut

D'accord,
et dans mon cas tu ferais comment du coup ?
la première child route doit rester telle quelle, elle redirige vers une autre url selon les paramètres
la deuxième doit matcher l'action avec le controlleur, et si l'action n'est pas trouvée, rediriger vers l'index

Hors ligne

 

#6 22-09-2014 13:36:08

kitensei
Nouveau membre
Date d'inscription: 16-09-2014
Messages: 7

Re: Routage par defaut

pour être un peu plus clair sur ce que je veux faire:

/api/hostbill -> route de base
/api/hostbill/:service -> liste des :call du service (/api/hostbill/client)
/api/hostbill/:service/:call -> resultat du :call (/api/hostbill/client/getClients)

/api/hostbill/hook -> index des hooks, retourne une liste des disponibles
/api/hostbill/hook/:hook -> appel du hook :hook

le souci c'est que si je vais ces 2 routes, quand j'appelle le /hook/:hook, l'autre route prend le relais car pour lui /hook/:hook c'est la même chose que /:service/:call

j'espère être plus clair

Hors ligne

 

#7 22-09-2014 14:13:19

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Routage par defaut

Alors à toi de ne pas rendre dynamique la route /:service en écrivant en dur l'url. Ca te fait faire beaucoup plus de routes mais sinon je ne vois pas.

Hors ligne

 

#8 22-09-2014 14:15:58

kitensei
Nouveau membre
Date d'inscription: 16-09-2014
Messages: 7

Re: Routage par defaut

ou alors je dois ajouter un niveau à cette route en mettant, par exemple, /service/:service

Hors ligne

 

#9 22-09-2014 15:32:33

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Routage par defaut

Oui tu peux aussi.

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