Question

Please help! I am a newbie to Zend and want to modifiy the default routing for a cms project I am working on.

How do I create a "catch all" route in zend should a controller not exist?

I am trying to create links like:

mydomain.com/slug

mydomain.com/slug1

Where slug and slug1 can be passed as params to a specified default controller (pagesController) so I can fetch the appropriate content from the DB.

I apprecaite any help!! :)

Was it helpful?

Solution

One way to do it is to write a simple Controller Plugin that tests whether a request is otherwise dispatchable, and if not, send it to your page controller/action:

<?PHP
class PageRouter extends Zend_Controller_Plugin_Abstract {

  public function preDispatch(Zend_Controller_Request_Abstract $req) {
    $dispatcher = Zend_Controller_Front::getInstance()->getDispatcher();
    if (!$dispatcher->isDispatchable($req, $req)) {

      $req->setModuleName('default');
      $req->setControllerName('page');
      $req->setActionName('page');
    }
  }

}

And make sure you register it with your frontcontroller:

Bootstrap.php:

protected function _initFrontControllerPlugins() {
    $this->bootstrap('FrontController');

    $fc = $this->getResource('FrontController');

    $pluginPageRouter = new PageRouter();
    $fc->registerPlugin($pluginPageRouter);    
}

OTHER TIPS

Instead of overriding the preDispatch, you could also do this in the routeShutdown. This was the only way to getting this up for me.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top