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.
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) |