代码在模块ZF2中的每个操作之前运行?

时间:2012-11-13 11:57:19

标签: zend-framework2 zend-framework-modules

我想在我的模块中的每个操作之前编写一些代码来运行。我试过挂钩到onBootstrap(),但代码也运行在其他模块上。

对我有什么建议吗?

1 个答案:

答案 0 :(得分:7)

有两种方法可以做到这一点。

一种方法是创建一个serice并在每个控制器调度方法中调用它

Use onDispatch method in controller. 


    class IndexController extends AbstractActionController {


        /**
         * 
         * @param \Zend\Mvc\MvcEvent $e
         * @return type
         */
        public function onDispatch(MvcEvent $e) {

            //Call your service here

            return parent::onDispatch($e);
        }

        public function indexAction() {
            return new ViewModel();
        }

    }

不要忘记在代码顶部包含以下库

use Zend\Mvc\MvcEvent;

第二种方法是使用调度

上的事件通过Module.php完成此操作
namespace Application;

use Zend\Mvc\ModuleRouteListener;
use Zend\Mvc\MvcEvent;

class Module {

    public function onBootstrap(MvcEvent $e) {        
        $sharedEvents = $e->getApplication()->getEventManager()->getSharedManager();
        $sharedEvents->attach(__NAMESPACE__, 'dispatch', array($this, 'addViewVariables'), 201);
    }

    public function addViewVariables(Event $e) {
        //your code goes here
    }

    // rest of the Module methods goes here...
    //...
    //...
}

How to create simple service using ZF2

reference2

reference3