Dependency Injections

Mit Dependency Injections können Abhängigkeiten von Objekten zur Laufzeit reglementiert werden. Benötigt beispielsweise ein Objekt eine Referenz auf ein anderes Objekt, wird dieses von n2n zur Verfügung gestellt.

  1. Magische Methoden
  2. Verfügbare Typen

Magische Methoden

Dependency Injections werden im n2n über magische Methoden realisiert. Eine typische magische Methode ist die Methode _init(), die zum Beispiel in Controllern oder [Thomas, ich brauch da einen Link]Lookupables[/Thomas, ich brauch da einen Link] implementiert werden kann.

class ExampleController extends ControllerAdapter {
    private $em;
    private $mc;
    
    private function _init(EntityManager $em, MessageContainer $mc) {
        $this->em = $em;
        $this->mc = $mc;
    }

Eine _init()-Methode ist private und wird typischerweise bei der Instanzierung des Objekts ausgeführt. Möchtest du für andere Objekte ebenfalls Dependency Injections nutzen, kannst du n2n über n2n\core\N2nContext::magicInit($object) manuell anweisen, _init() für diese Objete auszuführen.

class ExampleController extends ControllerAdapter {
    
    public function index(N2nContext $n2nContext) {
        $exampleModel = new ExampleModel();
        $n2nContext->magicInit($exampleModel);    
    }
}

Verfügbare Typen

Folgende Typen können mit Dependency Injections verwendet werden. n2n bietet für die meisten Typen auch eine statische Zugriffsmöglichkeit. Wenn möglich solltest du aber darauf verzichten, da dies das Erstellen von automatischen Tests erschweren kann.

Type Statischer Zugriff  
n2n\http\Request n2n\N2N::getCurrentRequest()  
n2n\http\Response n2n\N2N::getCurrentResponse()  
n2n\l10n\DynamicTextCollection    
n2n\core\N2nContext n2n\N2N::getN2nContext()  
n2n\core\Module    
n2n\model\LookupManager n2n\N2N::getLookupManager()  
n2n\l10n\Locale n2n\N2N::getN2nContext()->getLocale() Aktuelles Locale
n2n\persistence\DbhPool n2n\N2N::getDbhPool()  
n2n\persistence\orm\EntityManagerFactory n2n\N2N::getDbhPool()->getEntityManagerFactory()  
n2n\persistence\orm\EntityManager n2n\N2N::getDbhPool()->getEntityManagerFactory()->getShared()  
n2n\core\MessageContainer n2n\N2N::getMessageContainer()  
Implementationen von n2n\model\Lookupable n2n\N2N::getLookupManager()->lookup($className)  

 

« Weitere View-Typen Lookupable »

Kommentare

Du musst eingeloggt sein, damit du Beiträge erstellen kannst.

Fragen