我需要一些帮助。我想在控制器的操作运行之前在 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);
这可确保代码在调度前执行。