2014-07-08 2 views
0

Dans mon fichier de démarrage, j'ai la chaîne de routage suivante. Le comportement souhaité est d'envoyer toute demande via /usa/:controller/:action au module local. Par exemple, lorsque http://{hostname}/usa/index/index est appelée, la requête passe par le module local, index controller, index action.Impossible d'obtenir les paramètres à l'aide de Zend Routing Chain

Le problème que j'ai est d'ajouter des paramètres. Par exemple, quand je demande http://{hostname}/usa/index/index/id/5 pour essayer d'obtenir le paramètre id, je reçois le message d'erreur suivant: An Error occurred. Page not found. Exception information: Message: Invalid controller specified (usa) avec les params demande suivantes:

array (
'controller' => 'usa', 
'action' => 'index', 
'id' => '5', 
'module' => 'default', 
) 

Comment puis-je configurer le routage de la chaîne afin d'utiliser encore d'autres paramètres?

Voici mon code dans le fichier de lancement de l'application:

protected function _initRouting(){ 
    $router = Zend_Controller_Front::getInstance()->getRouter(); // Get the main router from the front controller. 
    $router->addDefaultRoutes(); // Don't forget default routes! 

    //get default local route (directs to the local module) 
    $defaultLocalRoute = new Zend_Controller_Router_Route(
     '/:controller/:action', 
     array(
       'module' => 'local', 
       'controller' => 'index', 
       'action' => 'index' 
     ) 
); 

    $regionRoute = new Zend_Controller_Router_Route(
    '/usa/', 
    array('region' => 'usa') 
); 

    //chain this region route to the default local route that directs to the local module 
    $fullRegionRoute = $regionRoute->chain($defaultLocalRoute); 
    //add the full route to the router (ie. hamiltonRoute, atlanticcaRoute) 
    $regionRouteName = 'usaRoute'; 
    $router->addRoute($regionRouteName, $fullRegionRoute); 
} 

Répondre

0

Ajout d'un * à la fin de la $defaultLocalRoute a pu résoudre ce problème pour moi.

//get default local route (directs to the local module) 
$defaultLocalRoute = new Zend_Controller_Router_Route(
    '/:controller/:action/*', 
    array(
      'module' => 'local', 
      'controller' => 'index', 
      'action' => 'index' 
    ) 
); 

Maintenant, quand va http://{hostname}/usa/product/view/id/5, la demande va à l'endroit désiré ->

module:  'local', 
controller: 'product', 
action:  'view', 
params:  array('id'=>5)