Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
J'ai un prob de routes.
J'ai une route par défaut qui redéfinit mes urls comme cela :
/type_acces/module/controller/action
Ex : http://domaine.fr/public/cms/article/list
Voici le code :
$front->getRouter()->addRoute( 'default', new Zend_Controller_Router_Route( '/:access/:module/:controller/:action/*', array ( 'access' => 'public', 'module' => 'default', 'controller' => 'index', 'action' => 'index' ) ) );
J'ai envie d'ajouter une route (simple pour l'instant) qui traduit :
/section/1
en /public/cms/get-public-articles/id-section/1.
Mais là, j'ai une erreur qui me dit qu'aucun module est définit. Si je regarde les param _request, j'ai :
array(5) { ["access"] => string(7) "section" ["module"] => string(1) "1" ["controller"] => string(5) "index" ["action"] => string(5) "index" ... }
Code de la route :
$route = new Zend_Controller_Router_Route( 'section/:id-section', array( 'access' => 'public', 'module' => 'cms', 'controller' => 'section', 'action' => 'get-public-articles' ) ); $front->getRouter()->addRoute('section', $route);
Donc on voit bien que c'est la route default qui prime et il tient pas compte de la 2eme.
Si je commente la route par défaut, ça marche.
J'ai pensé à un ordre de chargement des routes, mais rien n'y fait.
Des idées ? Merci d'avance.
Hors ligne
Bon, je pense avoir trouvé.
Le schéma de la route par défaut est trop "large" et du coup, l'url "/section/1" est traitée par la route par défault.
Suffit donc d'être plus restrictif dans la route par défault en précisant le premier paramètre comme public ou admin.
// default public route $router->addRoute( 'defaultPublic', new Zend_Controller_Router_Route( '/public/:module/:controller/:action/*', array ( 'access' => 'public', 'module' => 'default', 'controller' => 'index', 'action' => 'index' ) ) ); // default admin route $router->addRoute( 'defaultAdmin', new Zend_Controller_Router_Route( '/admin/:module/:controller/:action/*', array ( 'access' => 'admin', 'module' => 'default', 'controller' => 'index', 'action' => 'index' ) ) );
Pour faire mieux, j'aurais aimé utilisé une route_regexp, mais j'ai beau suivre les exemples, j'arrive à rien.
J'en suis resté à :
$router->addRoute( 'default', new Zend_Controller_Router_Route_Regex( '/([public|admin])/:module/:controller/:action/*', array ( 'access' => 'public', 'module' => 'default', 'controller' => 'index', 'action' => 'index' ), array( 1 => 'access' ) ) );
... où normalement j'attends en premier param uniquement "public" OU "admin", et je map la capture entre () en tant que param "access" (3ème param de la route).
Mais ça ne marche point...
J'aurais aimé des avis sur tout ça, sur vos façons de faire et ce que vous en pensez...
Hors ligne