2016-01-18 6 views

Antwort

6

Doctrine gibt Ihnen ein Proxy-Objekt aus einer automatisch generierten Klasse, die Ihre Entität erweitert und \Doctrine\ORM\Proxy\Proxy implementiert. Sie können den Code für diese automatisch generierten Klassen in app/cache/dev/doctrine/orm/Proxies/ anzeigen.

Das Proxy-Objekt ermöglicht eine Reihe von Verhaltensweisen, die Doctrine bietet, die Sie sonst explizit in Ihrer Entität codieren müssten, einschließlich Unterstützung für das verzögerte Laden von Eigenschaften. Wenn Ihr Objekt z. B. eine Referenz auf eine andere Entität hat (z. B. aus einer Assoziation), möchten Sie diese Referenzen nicht unbedingt immer laden, wenn Sie Ihren Datensatz User abrufen, da dies möglicherweise nicht der Fall ist relevant die ganze Zeit. Lazy-Loading ermöglicht das spätere Einlesen von Daten.

Um dieses verzögerte Laden durchzuführen, muss die Entität Zugriff auf Doctrine haben, damit Doctrine die relevanten Daten abrufen kann. Dies geschieht über eine __initializer__ -Eigenschaft, die für das Proxy-Objekt bereitgestellt wird. Der Rest passiert dann, behandelt von Doctrine, ohne dass Ihr Code die Details kennen muss.

+0

Bitte vervollständigen Sie Ihre Antwort und erzählen Sie, wie! – Trix

+1

Seltsame Sache ist, dass manchmal (wie beim Authentifizieren von Benutzern und Anrufen von Benutzeranbieter) eine reale Entität zurückgegeben wird. Aber später aufgerufen, wird es einen Proxy zurückgeben. –

1

Manchmal müssen wir den richtigen Klassennamen für eine Entität bestimmen.

Doctrine verwendet statische Methoden in einer Hilfsklasse: 'Doctrine \ Common \ Util \ ClassUtils', um den Namen der Proxy-Klasse zu generieren. Hier ist die Beschreibung: Class ClassUtils.

Falls Sie einen echten Klassennamen zu erhalten, benutzen Sie einfach:

$entityClassName = ClassUtils::getClass($entityObject);.

Ich habe das nützlich für die Protokollierung von Änderungen der Entität Daten gefunden (ursprüngliche Entität kann durch id und class name bestimmt werden).

Ich hoffe, es war hilfreich.

Verwandte Themen