2012-04-16 12 views
3

我々は現在、私はかなりいくつかの問題、この上のドキュメントを見つけるのを持つが、それは可能である知っていますZend Frameworkの中で2ZF2依存性の注入エイリアスと複数のインスタンス

をモジュールを書いています。

私は依存性注入によって設定したい階層に3つのクラスがあります。これらのクラスを呼び出しましょう。 ClassA、ClassBおよびClassC。

ClassAにはClassBインスタンスの配列が含まれ、ClassBにはClassCインスタンスの配列が含まれます。 ClassBの各インスタンスは、異なるパラメータを使用してインスタンス化する必要があります。 ClassCについても同様です。 3つのクラスすべてのパラメータは、コンストラクタを介して渡されます(必要に応じてセッタで処理することもできます)。

<?php 
class ClassA { 
    protected $arrClassBInstances = array(); 

    public function __construct($arrClassBInstances) { 
     $this->arrClassBInstances = $arrClassBInstances; 
    } 
} 

class ClassB { 
    protected $arrClassCInstances = array(); 
    protected $someOtherParam = ""; 

    public function __construct($arrClassCInstances, $someOtherParam) { 
     $this->arrClassBInstances = $arrClassCInstances; 
     $this->someOtherParam = $someOtherParam; 

    } 
} 

class ClassC { 
    protected $someParam = ""; 

    public function __construct($someParam) { 
     $this->someParam = $someParam; 
    } 
} 

したがって、私の質問には2つの部分があります。まず、異なるクラスのパラメータを注入して同じクラスのインスタンスを複数設定するにはどうすればよいですか?例えば、ClassBの複数のインスタンスはそれぞれ、ClassCインスタンスのサブセットです。 ZF2 DiCには何らかのエイリアスが存在する必要があります。

第2に、どのように再構成依存関係の配列をクラスに挿入できますか?たとえば、ClassBインスタンスの配列をClassAに挿入するにはどうすればよいですか?

可能であれば、直接DiCを使用した例と、module.config.phpのDIセクションでこれを実現する例を提供してください。 documentationから

答えて

0

は、私はこの作品をすべきだと思う:

// $event instance of \Zend\Mvc\MvcEvent 
$di = $event->getTarget()->getLocator(); 
$paramsForA = array(
    $di->get('qualified_namespaces_or_di_alias_for_b', array('arrClassCInstances'=>array(
     $di->get('qualified_namespaces_or_di_alias_for_c', array('someParam'=>1)), 
     $di->get('qualified_namespaces_or_di_alias_for_c', array('someParam'=>2)), 
    ))), 
    $di->get('qualified_namespaces_or_di_alias_for_b', array('arrClassCInstances'=>array(
     $di->get('qualified_namespaces_or_di_alias_for_c', array('someParam'=>3)), 
     $di->get('qualified_namespaces_or_di_alias_for_c', array('someParam'=>4)), 
    ))), 
); 
$classA = $di->get('qualified_namespaces_or_di_alias_for_a', array('arrClassBInstances'=>$paramsForA)); 

あなたは$di->get()