1

コントローラーコンストラクターでイベントマネージャーにアクセスする方法は? コンストラクターでイベント マネージャーを呼び出すと、次のエラーが表示されます。

Zend\ServiceManager\ServiceManager::get は、イベントのインスタンスを取得または作成できませんでした

4

1 に答える 1

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);
}
于 2013-08-16T08:55:39.310 に答える