Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 02-08-2009 13:15:10

Dator
Membre
Lieu: Lyon
Date d'inscription: 14-05-2008
Messages: 10
Site web

[Zend_Controller_Router] Un problème de dispatch de la bonne route.

Bonjour,

Aujourd'hui je suis confronté a un petit problème avec le Zend Framework.
Dans mon application j'ai un controller ApiController et un règle de routage (dans mon Bootstrap.php) qui ressemble à cela :

Code:

protected function _initRoutes()
        {
            $routeur = Zend_Controller_Front::getInstance()->getRouter();
            $routeur->addRoute('username', new Zend_Controller_Router_Route(':username', array(
                'module' => 'frontend',
                'controller' => 'users',
                'action' =>'show'))
            );

            return $routeur;
        }

Le problème est que si je met cela : http://monapp.com/api il me dispatch vers la route (donc frontend/users/show) et pas vers le controller ApiController.

Savez vous comment régler ce problème tout en gardant ce schéma :

Je veux accèder aux utilisateur comme cela : http://monapp.com/username
Mais je veux aussi accéder aux controller comme cela http://monapp.com/controller

Merci beaucoup,

Bonne journée
Clément.

Hors ligne

 

#2 02-08-2009 18:43:17

tomtom
Membre
Lieu: Strasbourg
Date d'inscription: 07-01-2009
Messages: 14

Re: [Zend_Controller_Router] Un problème de dispatch de la bonne route.

Salut

le pb de ce genre de route c'est qu'elle peut faire correspondre ton controlleur a un username.

pour etre sur que monapp.com/controller reponde correctement tu dois définir une nouvelle route après ta route "username" (puisque la derniere route déclarée sera la première testée)

par exemple :

Code:

$router->addRoute('monController', new Zend_Controller_Router_Route_Static('monController', array(
  'module' => 'le module qui va bien',
  'controller' => 'monController',
  'action' => 'action qui va bien'))
);

si tu as plusieurs controlleurs et que tu ne veux pas recreer une route statique a chaque fois tu peux faire un truc dans ce genre la (dsl pour la syntaxe en .ini mais j'ai pas trop l'habitude de faire autrement, je te laisserai traduire ca en methode du router)

Code:

routes.nomroute.type = "Zend_Controller_Router_Route"
routes.nomroute.route = ":controller"
routes.nomroute.defaults.module = module
routes.nomroute.defaults.action = action par défault
routes.nomroute.reqs.grid = "controller1|controller2|controller3{1}"

la derniere ligne permet de donner des valeurs a notre variable :controller

donc si tu tape monapp.com/toto ca ne correspond ni a controller1, ni a contrller2 etc... donc il ne s'arretera pas sur cette route et passera a route username

c'est la seule maniere que j'ai trouver pour avoir ce genre d'url parfaitement propre


Voila un exemple concret depuis un de mes fichiers de routes.ini

Code:

routes.shop_cat.type = "Zend_Controller_Router_Route"
routes.shop_cat.route = "shop/:cat"
routes.shop_cat.defaults.module = shop
routes.shop_cat.defaults.controller = index
routes.shop_cat.defaults.action = cat
routes.shop_cat.reqs.cat = "[0-9a-z-]+"

routes.shop_admin.type = "Zend_Controller_Router_Route_Static"
routes.shop_admin.route = "shop/admin"
routes.shop_admin.defaults.module = shop
routes.shop_admin.defaults.controller = admin
routes.shop_admin.defaults.action = index

si tu appelle monapp.com/shop/admin ca envoie sur la page d'admin et monapp.com/shop/catégorie ca renverra donc sur l'action cat de l'index controller du module shop avec la variable cat=catégorie

Attention si tu inverse l'ordre des 2 routes ca ne marche plus

bon courage

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