我想在我的模块中的每个操作之前编写一些代码来运行。我试过挂钩到onBootstrap()
,但代码也运行在其他模块上。
对我有什么建议吗?
答案 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...
//...
//...
}