2

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

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

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

mydomain.com/slug

mydomain.com/slug1

其中 slug 和 slug1 可以作为参数传递给指定的默认控制器(pagesController),以便我可以从数据库中获取适当的内容。

我很感激任何帮助!:)

4

2 回答 2

2

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

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

}

并确保将其注册到您的前端控制器:

引导程序.php

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

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

    $pluginPageRouter = new PageRouter();
    $fc->registerPlugin($pluginPageRouter);    
}
于 2010-11-27T23:41:14.637 回答
0

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

于 2013-04-09T10:00:29.103 回答