Zend Framework 2 调度事件在操作之前不会运行


Zend Framework 2 dispatch event doesn't run before action


我需要一些帮助。我想在控制器的操作运行之前在 Zend Framework 2 中运行一个方法。我将我的方法放在模块.php的 onBootstrap 中,但它在启动操作之前没有运行。

在模块.php中:

public function onBootstrap(MvcEvent $e)
{
    $eventManager        = $e->getApplication()->getEventManager();
    $moduleRouteListener = new ModuleRouteListener();
    $moduleRouteListener->attach($eventManager);
    $app  = $e->getApplication();
    $em = $app->getEventManager();
    $em->attach(MvcEvent::EVENT_DISPATCH, function($e) {
        $controller = $e->getTarget();
        $controller->Init();
    });
}

我想在操作运行之前初始化我的适配器的 Init() 方法,但它不起作用,我总是收到以下消息:
可捕获的致命错误:传递给应用程序''模型''成员::__construct() 的参数 1 必须是 Zend''Db''Adapter''Adapter 的实例,给定空值,在第 39 行的 PATH''module''Application''src''Application''Controller''AdminController.php 中调用,并在第 17 行的 PATH''module''Application''src''Application''Model''Members.php 中定义

members 类位于应该运行的操作中,其__construct需要有一个应在 Init() 方法中初始化的有效适配器对象。

谁能帮我?多谢!

尝试不同的方法:

我假设您的控制器扩展了Zend'Mvc'Controller'AbstractActionController.在控制器中重写父级的 onDispatch 方法,以执行您需要执行的操作:

前任:

class YourController extends AbstractActionController {
    public function onDispatch($event){
        $this->Init();
        return parent::onDispatch($event);
    }
    //your other actions/init methods etc...
}
附加到

事件时,您需要将优先级设置为 1>。

例如。

$em->attach(MvcEvent::EVENT_DISPATCH, function($e) {
        $controller = $e->getTarget();
        $controller->Init();
    }, 100);

这可确保代码在调度前执行。