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

Gab*_*rga 1 php zend-framework2


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

在Module.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();
    });
}
Run Code Online (Sandbox Code Playgroud)

我想运行Init()方法到我的适配器将在操作运行之前初始化但它不起作用我总是收到此消息:
可捕获的致命错误:参数1传递给Application\Model\Members :: __ construct()必须是一个Zend\Db\Adapter\Adapter的实例,给定null,在第39行的PATH\module\Application\src\Application\Controller\AdminController.php中调用,并在PATH\module\Application\src\Application\Model \中定义第17行的Members.php

成员类在应该运行的操作中,其__construct需要有一个应该在Init()方法中初始化的有效Adapter对象.

谁能帮助我?非常感谢!

STL*_*key 7

尝试不同的方法:

我假设你的控制器扩展了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...

}
Run Code Online (Sandbox Code Playgroud)