1

コントローラに移動すると、そのコントローラのindexActionメソッドに入る前にインデックスURL preDispatchが呼び出されますが、その後はpostDispatchが呼び出されません。なぜ呼び出されないので、どういうわけかpostDispatchを呼び出すように強制する必要がありますか?postDispachメソッドが呼び出されないプラグインが2つあります。たとえばadmin/listpermsなどのURLにアクセスすると、postDispatchが呼び出され、すべてが機能します。

AdminController.php

class AdminController extends Application_Controllers_Base {

    public function indexAction() {
        $this->view->headTitle = $this->alias('TITLE_ADMIN_PANEL');
    }

    public function listpermsAction() {
       $this->view->headTitle = $this->alias('TITLE_PERMISSION_LIST');
       $permService = new Application_Services_AdminPermission();
       $perms = $permService->getPermissionList();

       if(!$perms) {
            // TODO: 
       } else {
           $this->view->permList = $perms;
        }

    }
}

Base.php

class Application_Controllers_Base extends Zend_Controller_Action {
}

DbLogPlugin.php

class Application_Plugin_DbLogPlugin extends Zend_Controller_Plugin_Abstract {

    public function postDispatch(Zend_Controller_Request_Abstract $request) {
        $view = Zend_Controller_Front::getInstance()->getParam('bootstrap')->getResource('view');
        $view->developerLog = $this->getQuerysLogs();   
    }
}

bootstrap.php

protected function _initAutoload(){
    $autoloader = new Zend_Application_Module_Autoloader(array(
            'namespace' => 'Application_', //'
            'basePath'  => APPLICATION_PATH
    ));
    $autoloader->addResourceType('dao', 'dao', 'Dao');
    $autoloader->addResourceType('services', 'services', 'Services');
    $autoloader->addResourceType('plugins', 'plugins', 'Plugins');
    $autoloader->addResourceType('models', 'models', 'Models');    
    $autoloader->addResourceType('controllers', 'controllers', 'Controllers');

    require_once('controllers/FrontController.php');
        $front = Application_Controllers_FrontController::getInstance();      
        $front->setControllerDirectory(APPLICATION_PATH.'/controllers')
        ->setRouter(new Zend_Controller_Router_Rewrite())
        ->registerPlugin(new Application_Plugin_DbLogPlugin())
        ->registerPlugin(new Application_Plugin_AuthPlugin())
        ->registerPlugin(new Application_Plugin_ViewPlugin());
    return $autoloader;
} 
4

0 に答える 0