Мне нужна помощь. Я хочу запустить метод в Zend Framework 2 до запуска действия контроллера. Я поместил свой метод в onBootstrap Module.php, но он не запускается до начала действия.
В 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(); }); }
Я хочу запустить метод Init (), чтобы мой адаптер был инициализирован до запуска действия, но он не работал, и я всегда получаю это сообщение:
Обрезаемая фатальная ошибка: аргумент 1 передан в Application \ Model \ Members :: __ construct () должен быть экземпляром Zend \ Db \ Adapter \ Adapter, null, вызывается в PATH \ module \ Application \ src \ Application \ Controller \ AdminController. php в строке 39 и определен в PATH \ module \ Application \ src \ Application \ Model \ Members.php в строке 17
Класс участников находится в действии, которое должно выполняться, и его __construct должен иметь действительный объект Adapter, который должен быть инициализирован в методе 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);
Это обеспечивает выполнение кода перед отправкой.