我在谷歌上搜索,我得到了这个代码来检查控制器是否存在。
$front = Zend_Controller_Front::getInstance();
if ($front->getDispatcher()->isDispatchable($request)) {
// Controller exists
}
但我不知道我应该把这段代码放在哪里。是什么$request
?
我在Boostrap.php。我有_initRoute
,我需要检查控制器是否不存在,如果不存在,那么我将添加一条新路由。
第一次回答后更新。我在 Boostrap.php 中有一些路线
public function _initRoute() {
$front = Zend_Controller_Front::getInstance();
$router = $front->getRouter();
$router->addRoute(
'username',
new Zend_Controller_Router_Route(':username',
array('controller'=>'profile',
'action'=>'index')
)
);
$router->addRoute(
'username/sets',
new Zend_Controller_Router_Route(':username/sets',
array('controller'=>'profile',
'action'=>'sets')
)
);
}
此路由将使 mydomain.com/{username} 显示与 mydomain.com/profile/index/username/{username} 相同的内容
但问题是,当我输入 mydomain.com/{anything or any controller} 时,它会按照我在 Boostrap 上定义的方式进行路由。所以,我认为,我需要检查控制器是否存在,如果不存在则执行路由。
我错了吗?在第一次回答后,我添加了插件,并将其放在 _initPlugin 下进行注册。但看起来它不起作用。
这是我的 boostrap 文件:
<?php
//Zend_View_Helper_PaginationControl::setDefaultViewPartial('paginator.phtml');
class Plugin_MyX extends Zend_Controller_Plugin_Abstract {
public function routeStartup(Zend_Controller_Request_Abstract $request) {
$front = Zend_Controller_Front::getInstance();
$dispatcher = $front->getDispatcher();
if (!$dispatcher->isDispatchable($request)) {
$front = Zend_Controller_Front::getInstance();
$router = $front->getRouter();
$router->addRoute(
'username',
new Zend_Controller_Router_Route(':username',
array('controller'=>'profile',
'action'=>'index')
)
);
$router->addRoute(
'username/sets',
new Zend_Controller_Router_Route(':username/sets',
array('controller'=>'profile',
'action'=>'sets')
)
);
} else {
// exist
}
}
}
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
protected function _initPlugin() {
$front = Zend_Controller_Front::getInstance();
$front->registerPlugin(new Plugin_MyX());
}
public function _initRoute() {
}
}