请帮忙!我是 Zend 的新手,想修改我正在处理的 cms 项目的默认路由。
如果控制器不存在,我如何在 zend 中创建“catch all”路由?
我正在尝试创建如下链接:
mydomain.com/slug
mydomain.com/slug1
其中 slug 和 slug1 可以作为参数传递给指定的默认控制器(pagesController),以便我可以从数据库中获取适当的内容。
我很感激任何帮助!:)
请帮忙!我是 Zend 的新手,想修改我正在处理的 cms 项目的默认路由。
如果控制器不存在,我如何在 zend 中创建“catch all”路由?
我正在尝试创建如下链接:
mydomain.com/slug
mydomain.com/slug1
其中 slug 和 slug1 可以作为参数传递给指定的默认控制器(pagesController),以便我可以从数据库中获取适当的内容。
我很感激任何帮助!:)
一种方法是编写一个简单的控制器插件来测试请求是否可分派,如果不是,则将其发送到您的页面控制器/操作:
<?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);
}
除了覆盖 preDispatch,您还可以在 routeShutdown 中执行此操作。这是为我解决这个问题的唯一方法。