2012-11-11 6 views
9

Ich verwende Doctrine 2 in einer Zend Framework 2 Anwendung. Gibt es eine Möglichkeit, mit ZF2 Abhängigkeiten in Entitäten zu injizieren, die von Doctrine zurückgegeben werden? Entitäten werden von Doctrine erstellt, wenn sie aus der Datenbank abgerufen werden. Soweit ich weiß, Abhängigkeiten in ZF2 zu injizieren, muss ich Entitäten mithilfe von Service Locator instanziieren. Ich kann nicht sehen, wie ich das mit Doctrine integrieren kann, ohne Doctrines Codebasis ändern zu müssen. Die einzig mögliche Lösung, die ich jetzt sehen kann, besteht darin, einen kleinen Dienst zu schreiben, der das von Doctrine zurückgegebene Ergebnis übernimmt und die erforderlichen Abhängigkeiten einfügt. Gibt es eine elegantere Lösung?ZF2 mit Lehre 2 - Abhängigkeiten in Entitäten einfügen

Mit freundlichen Grüßen Christian

+0

Was genau willst du spritzen? Ich kann mir keinen Fall vorstellen, in dem es Sinn macht, etwas in eine Entität zu injizieren. Ich bin mir sicher, dass es eine Möglichkeit gibt, das zu tun, was Sie wollen, was in das Konzept passt. –

+0

Ich habe in der Zwischenzeit eine andere Richtung genommen. Die Dinge, die ich an die Entitäten selbst delegieren wollte, werden jetzt an einen Service delegiert, der die Entitäten verwaltet. Es ist also nicht mehr nötig, etwas in Entitäten zu injizieren. – griesi

Antwort

16

Blick in die Lehre EventManager, insbesondere die postLoad Lifecycle-Veranstaltung, die von den Eventmanagern wird jedes Mal ausgelöst wird, ein Unternehmen aus der Datenbank geladen.

Um alles in ZF2 zu verbinden, müssten Sie ein paar Dinge tun.

zunächst eine Lehre-Flavored Ereignis-Listener schreiben:

<?php 
class InjectStuffListener { 
    private $sl; 

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

    public function postLoad($eventArgs){ 
     $entity = $eventArgs->getEntity; 
     $entity->setThingToBeInjected($this->sl->get('some.thing')); 
    } 
} 

Dann in irgendwo wie ein module.php (vielleicht gibt es einen besseren Ort als onBootstrap, aber was auch immer):

<?php 
public function onBootstrap(){ 
    $sm = $e->getApplication()->getServiceManager(); 
    $em = $sm->get('doctrine.entitymanager.orm_default'); 
    $dem = $em->getEventManager(); 
    $dem->addEventListener(array(\Doctrine\ORM\Events::postLoad), new InjectStuffListener($sm)); 

} 
+0

Ja, aber ich kann nicht sehen, wie ich dies mit dem Service Locator/Service Manager von ZF2 verbinden könnte, um Abhängigkeiten zu injizieren, die von ZF2 verwaltet werden. Die Entität selbst kennt den Service Locator nicht, da sie nicht über den Service Locator instanziiert wird. – griesi

+0

@griesi - siehe meine Bearbeitung für einen Beispielcode, der Listener initialisiert und sie während des ZF2-Bootstrap an den EventManager des Doctrics anhängt. – timdev

+0

Danke das ist genau ich suchte nach – griesi

Verwandte Themen