2012-04-16 1 views
3

Nous écrivons actuellement un module Zend Framework 2.ZF2 injection Alias ​​et Dépendance plusieurs instances

J'ai assez mal à trouver la documentation à ce sujet, mais sachez qu'il est possible.

J'ai 3 classes dans une hiérarchie que je voudrais configurer via l'injection de dépendance. Appelons ces classes; ClassA, ClassB et ClassC. ClassA contient un tableau d'instances ClassB et ClassB contient un tableau d'instances ClassC. Chaque instance de ClassB doit être instanciée à l'aide de différents paramètres. La même chose s'applique pour ClassC. Les paramètres des 3 classes sont transmis via le constructeur (ceci peut aussi être géré avec un setter si nécessaire).

<?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; 
    } 
} 

Donc, ils sont 2 parties à mes questions. Tout d'abord, comment puis-je configurer plusieurs instances de la même classe avec différents paramètres injectés? Par exemple, plusieurs instances de ClassB chacune avec son propre sous-ensemble d'instances ClassC. Il doit y avoir une sorte d'alias dans le ZF2 DiC.

Deuxièmement, comment puis-je injecter un tableau de dépendances de reconfiguration dans une classe. Par exemple, comment puis-je injecter un tableau d'instances ClassB dans ClassA?

Si possible, veuillez me donner un exemple en utilisant directement le DiC et un exemple de réalisation dans la section DI du module.config.php.

Répondre

0

De l'documentation, je pense que ce devrait fonctionner:

// $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)); 

Soit vous utilisez DI alias ou full qualified namespace comme les premiers paramètres de $di->get()