0

In my bootstrap file, I have the following routing chain. The desired behaviour is to send any request through /usa/:controller/:action to the local module. For instance, when http://{hostname}/usa/index/index is called, the request goes through the local module, index controller, index action.

The problem I am having is adding parameters. For instance, when I request http://{hostname}/usa/index/index/id/5 to try to get the id parameter, I get the following error message: An Error occurred. Page not found. Exception information: Message: Invalid controller specified (usa) with the following request params:

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

How can I set up the chain routing in order to still utilize other parameters?

Here is my code in the application bootstrap:

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);
}
Nolan Knill
  • 499
  • 5
  • 19

1 Answers1

0

Adding a * to the end of the $defaultLocalRoute was able to fix this issue for me.

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

Now when going to http://{hostname}/usa/product/view/id/5, the request goes to the desired location ->

module:     'local', 
controller: 'product', 
action:     'view', 
params:     array('id'=>5)
Nolan Knill
  • 499
  • 5
  • 19