请帮忙!我是Zend的新手,想要修改我正在处理的cms项目的默认路由。
如果控制器不存在,如何在zend中创建“catch all”路由?
我正在尝试创建以下链接:
mydomain.com/slug
mydomain.com/slug1
slug和slug1可以作为params传递给指定的默认控制器(pagesController),这样我就可以从DB中获取适当的内容。
我欢迎任何帮助!! :)
答案 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。这是我解决这个问题的唯一方法。