2012-10-06 4 views
25

Wie kann ich einen Entity Manager von einem Controller mit den neuesten Symfony und Doctrine bekommen?So erhalten Sie Entity Manager für Doctrine Entity mit Symfony 2.1 aus dem Controller

Die in "Das Buch" beschriebene Methode wird jetzt als veraltet markiert. Was ist ein moderner (richtiger) Weg, dies zu tun?

public function someAction() 
{ 
    // getEntityManager() from Doctrine\Bundle\DoctrineBundle\Registry is deprecated 
    $entityManager = $this->getDoctrine()->getEntityManager(); 
    ... 
} 
+0

Eigentlich wusste ich nicht über die veraltete Methode bis vor kurzem, es wurde als eine Warnung in der Symfony2 Debug-Seite festgestellt, und es hat mir auch gesagt, was ist die neue Methode, die ich verwenden sollte. Also ich vermute, dass Sie die meiste Zeit die Antwort auf der Debug-Seite finden. –

Antwort

45

Verwenden Sie stattdessen $this->getDoctrine()->getManager().

Eigentlich ist es am besten, Controller nicht auf die verwendete Persistenzschicht aufmerksam zu machen. Dieses Zeug sollte in die Service Layer verschoben werden, um die Art, wie die Daten persistent sind, zu abstrahieren.

+0

Ja, richtig. Danke) –

+1

Was meinst du? Sollen alle datenbankbezogenen Methoden in die Serviceebene verschoben werden? Was ist der Vorteil? Der EntityManager befindet sich bereits in der Service-Schicht (nehme ich an). Oder verstehe ich etwas falsch? Kannst du ein Beispiel geben? –

+0

@Elur Ich habe überall ähnliche Aussagen wie "Das solltest du nicht in deinem Controller machen" gesehen, aber alle Antworten erklären nicht warum. Ich weiß, dass Controller Framework-spezifisch sind und durch das Behalten von Daten in Ihrem Controller ist Ihr Code nicht so portabel wie er sein könnte, aber ich habe kein konkretes Beispiel dafür gesehen. – ILikeTacos

Verwandte Themen