Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
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 :
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
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 :
$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)
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
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
Pages: 1