コントローラーコンストラクターでイベントマネージャーにアクセスする方法は? コンストラクターでイベント マネージャーを呼び出すと、次のエラーが表示されます。
Zend\ServiceManager\ServiceManager::get は、イベントのインスタンスを取得または作成できませんでした
コントローラーコンストラクターでイベントマネージャーにアクセスする方法は? コンストラクターでイベント マネージャーを呼び出すと、次のエラーが表示されます。
Zend\ServiceManager\ServiceManager::get は、イベントのインスタンスを取得または作成できませんでした
オブジェクトがインスタンス化されるとサービス マネージャーが挿入されるため、この時点ではサービス マネージャーにアクセスできません。
コンストラクターではなく、 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);
}