Search code examples
zend-frameworkzend-route

Zend Route Catch all


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


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);    
    }