我想编写一些代码在模块中的每个操作之前运行。我试过挂钩,onBootstrap()
但代码也在其他模块上运行。
对我有什么建议吗?
我想编写一些代码在模块中的每个操作之前运行。我试过挂钩,onBootstrap()
但代码也在其他模块上运行。
对我有什么建议吗?
有两种方法可以做到这一点。
一种方法是创建一个服务并在每个控制器调度方法中调用它
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...
//...
//...
}