Zend Route Catch all

时间:2010-11-26 16:14:12

标签: zend-framework zend-route

请帮忙!我是Zend的新手,想要修改我正在处理的cms项目的默认路由。

如果控制器不存在,如何在zend中创建“catch all”路由?

我正在尝试创建以下链接:

mydomain.com/slug

mydomain.com/slug1

slug和slug1可以作为params传递给指定的默认控制器(pagesController),这样我就可以从DB中获取适当的内容。

我欢迎任何帮助!! :)

2 个答案:

答案 0 :(得分:2)

一种方法是编写一个简单的Controller插件来测试请求是否可以发送,如果没有,则将其发送到页面控制器/操作:

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

}

并确保您使用前控制器进行注册:

<强> bootstrap.php中

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

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

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

答案 1 :(得分:0)

您也可以在routeShutdown中执行此操作,而不是覆盖preDispatch。这是我解决这个问题的唯一方法。