如何从zend框架的插件中触发索引控制器


How to trigger index controller from plugin in zend framework

我尝试使用插件来调度不同模块的引导。然而,由于某种原因,我无法触发每个模块的控制器,错误是"EXCEPTION_NO_CONTROLLER"。谁能给点建议?

// Plugin Code:
class Plugin_AccessCheck extends Zend_Controller_Plugin_Abstract {
    public function __construct() {
    }
    public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request) {
        if ('admin' == $request->getModuleName()) {
            require_once APPLICATION_PATH .'/modules/admin/Bootstrap.php';
            $moduleBootstrap = new Admin_Bootstrap();
            $moduleBootstrap->bootstrap();
        } else if('site' == $request->getModuleName()) {
        }
    }
}
// Module Bootstrap:
class Admin_Bootstrap extends Zend_Application_Module_Bootstrap{    
    public function Admin_Bootstrap() {
    }
    protected function _initAutoload() {
        define("localhost", "adrian");
    }
}

每个请求都在上运行所有模块引导。

如果你希望在请求被路由到单个模块时执行一些处理,那么在应用程序引导或模块引导中注册一个插件;如上所述,它们都将运行——如果请求不是针对他的模块,则会提前退出。

请参阅MWOP的这篇文章进行进一步讨论:

http://www.mwop.net/blog/234-Module-Bootstraps-in-Zend-Framework-Dos-and-Donts.html

我不知道,如果我明白你的问题,你可以试试

public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request)
{
   $request = Zend_Controller_Front::getInstance()->getRequest();
    if ('admin' == $request->getModuleName()) {
        require_once APPLICATION_PATH.'/modules/admin/Bootstrap.php';
        $moduleBootstrap = new Admin_Bootstrap();
        $moduleBootstrap->bootstrap();
    }
    else if('site' == $request->getModuleName()){
               $request->setModuleName('othermodule');
                $request->setControllerName('othercontroller');
                $request->setActionName('otherindex');
    }
}