2

MvcEvent::EVENT_BOOTSTRAPリスナーが実行される前に、いくつかのコードを実行する必要があります。明らかModule::onBootstrapにオプションではありません。次のコードで終了します。

class Module
{

    function init(\Zend\ModuleManager\ModuleManager $moduleManager)
    {
        $moduleManager->getEventManager()->attach(
                MvcEvent::EVENT_BOOTSTRAP, array(ClassX, 'StaticMethodOfClassX'), 20000);
    }

}

参照をハードコーディングしたくありませんがarray(ClassX, 'StaticMethodOfClassX')、サービスマネージャーから取得します。私の問題は、モジュールの init メソッド内でサービス マネージャーの参照を取得する方法がわからないことです。何か助けはありますか?または、これは現在ZF2では不可能ですか? このスキーマまたは意見のどのような変形も高く評価されます;)

編集:

「明らかにModule::onBootstrapはオプションではありません」を明確にします。cosはそれほど簡単ではないかもしれません;)

イベントがトリガーされるとモジュールのModule::onBootstrapメソッドが実行されますが、そのイベントへの各モジュールのメソッドの添付は、モジュールがロードされた順序に依存します。そのため、特定のメソッドが実行される順序は、存在する他のモジュールと、その特定のモジュールがロードされる順序に他のモジュールがどのように影響するかによって異なります。さらに、優先度が 1 より大きいイベントにアタッチされたリスナーは、モジュールメソッドの前に実行されます (例: リスナー)。だから、私が望むものを達成するためにMvcEvent::EVENT_BOOTSTRAPModule::onBootstrapModule::onBootstrapMvcEvent::EVENT_BOOTSTRAPModule::onBootstrapViewManager::onBootstrap

MvcEvent::EVENT_BOOTSTRAPリスナーが実行される前に、いくつかのコードを実行する必要があります

モジュールの obBootstrap メソッドはオプションではありません。

4

5 に答える 5

0

MvcEventから取得できます

$locator = $event->getTarget()->getServiceLocator()->get('YourObject')

イベントにアクセスできない場合は、ブートストラップで Module クラスのプロパティとしてイベントを設定し、いつでも init メソッドで使用できます。

 public function onBootstrap($event) {
        $this->setMvcEvent($event);
 }

function init(\Zend\ModuleManager\ModuleManager $moduleManager)
{
    $locator = $this->mvc_event->getTarget()->getServiceLocator()->get('YourClass');
    $moduleManager->getEventManager()->attach(
            MvcEvent::EVENT_BOOTSTRAP, array(ClassX, 'StaticMethodOfClassX'), 20000);
}
于 2013-10-22T21:37:28.007 に答える
0

少し後かもしれませんが、それが他の誰かに役立つことを願っています。最初の時点では、Service Manager には多くのサービスがありませんが、アクセスできます。

public function init(ModuleManager $moduleManager)
{
    $sm = $moduleManager->getEvent()->getParam('ServiceManager');
    $applicationConfig = $sm->get('applicationconfig');
    var_dump($applicationConfig['modules']);
}

この場合、モジュール名を取得しています。

于 2015-01-21T10:45:54.980 に答える
-1

これは良い考えです。

クラスモジュール

public function onBootstrap(MvcEvent $e)
{

    $sm = $app->getServiceManager();
    $config = $sm->get('config');

これですべてです。

于 2015-02-28T09:31:01.480 に答える