2

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!! :)

Charles
  • 50,943
  • 13
  • 104
  • 142
Cullen2010
  • 33
  • 5

2 Answers2

2

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);    
}
timdev
  • 61,857
  • 6
  • 82
  • 92
  • You are a lifesaver!! I was so close just was unsure how to use the isDispatchable in the plugin. Thank you for your help timdev!! – Cullen2010 Nov 29 '10 at 10:10
0

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