2013-08-16 5 views
1

Как получить доступ к диспетчеру событий в конструкторе контроллера? когда я называю менеджер событий в конструкторе, появляется эта ошибка:ZF2 Как получить доступ к диспетчеру событий в конструкторе контроллера

Zend \ ServiceManager \ ServiceManager :: прибудет не удались извлечь или создать экземпляр для события

ответ

2

У вас нет доступа к менеджеру службы в этом поскольку он вводится после создания объекта.

Вы всегда можете переместить ваш код, чтобы срабатывать onDispatch(), а не в застройщик:

/** 
* Execute the request 
* 
* @param MvcEvent $e 
* @return mixed 
* @throws Exception\DomainException 
*/ 
public function onDispatch(MvcEvent $e) 
{ 
    // do something here 
    // or you could use the events system to attach to the onDispatch event 
    // rather than putting your code directly into the controller, which would be 
    // a better option 

    return parent::onDispatch($e); 
} 

Я просто хотел бы использовать события, чтобы прикрепить что когда-либо вам нужно, а не с помощью контроллера

module.php

/** 
* Initialize 
* 
* @param \Mis\ModuleManager 
*/ 
public function init(ModuleManager $manager) 
{ 
    $events = $manager->getEventManager(); 
    $sharedEvents = $events->getSharedManager(); 
    $sharedEvents->attach(__NAMESPACE__, 'dispatch', function($e) { 
     /* @var $e \Zend\Mvc\MvcEvent */ 
     // fired when an ActionController under the namespace is dispatched. 
     $controller = $e->getTarget(); 
     $routeMatch = $e->getRouteMatch(); 
     /* @var $routeMatch \Zend\Mvc\Router\RouteMatch */ 
     $routeName = $routeMatch->getMatchedRouteName(); 

     // Attach a method here to do what you need 

    }, 100); 
} 
+0

Несмотря на тот возраст ответить, я хотел бы знать, как только вы сделали какую-то работу в module.php «s '// Прикрепление метод здесь, чтобы делать то, что вы need' с помощью метод Как получить данные/данные, переданные целевому контроллеру? – inckka

Смежные вопросы