0

ZendFramework2モジュールのmodule.phpファイルで以下の関数を見つけました。この関数でサービスマネージャー($ sm)のオブジェクトを取得する方法がわかりませんか?

`

public function getControllerConfig()  
    {
        return array(  
             'initializers' => array(    
                function($instance, $sm){      
                      if($instance instanceof Service\FormServiceAwareInterface){  
                        $sm = $sm->getServiceLocator();
                        $formService = $sm->get('some_service');
                        $instance->setFormService($formService);
                      }
                 },
              ),
          );
      }

`

getControllerConfig関数でオブジェクト$smを取得する方法を誰かが説明できますか?

4

1 に答える 1

1

ZF2 が mvc プロセスを開始すると、すべてのデフォルト サービスが最初に登録されます。

これらのサービスの詳細については、マニュアルを確認してください: http://framework.zend.com/manual/2.0/en/modules/zend.mvc.services.html

最も重要なサービスの 1 つは、すべてのモジュール関連機能を処理するModuleManagerです。

ModuleManagerの開始プロセスは にありますZend\Mvc\Service\ModuleManagerFactory->createService()

次のコードに注意してください。

$serviceListener->addServiceManager(
    'ControllerLoader',
    'controllers',
    'Zend\ModuleManager\Feature\ControllerProviderInterface',
    'getControllerConfig'
);

Zend\ModuleManager\Listener\ServiceListener->addServiceManager()これにより、一時的にモジュール名とメソッド名が呼び出されて保存されます。

次に、loadModule イベントがトリガーZend\ModuleManager\Listener\ServiceListener->onLoadModule()されると、呼び出されます。このメソッドでは、 から返されたすべての結果Modele->getControllerConfig()がサービスとして登録され、 に入れられZend\ServiceManager\ServiceManagerます。

最後に、 からサービスを呼び出すとgetControllerConfig()Zend\ServiceManager\ServiceManager->create()が呼び出され、インスタンスと ServiceManager がパラメーターとしてクロージャーに設定されます。

foreach ($this->initializers as $initializer) {
    if ($initializer instanceof InitializerInterface) {
        $initializer->initialize($instance, $this);
    } elseif (is_object($initializer) && is_callable($initializer)) {
        $initializer($instance, $this);
    } else {
        call_user_func($initializer, $instance, $this);
    }
}

ZF2 がベータ 3 で動作する前に、ZF2 の Mvc プロセスに関するメモを書きました。

于 2012-12-19T06:18:08.327 に答える