2016-01-18 8 views

Odpowiedz

6

Doctrine przedstawia obiekt proxy z automatycznie generowanej klasy, która rozszerza twój obiekt i implementuje \Doctrine\ORM\Proxy\Proxy. Możesz wyświetlić kod dla tych wygenerowanych automatycznie klas w app/cache/dev/doctrine/orm/Proxies/.

Obiekt proxy zezwala na zestaw zachowań, które Doctrine zapewnia, że ​​w przeciwnym razie musiałbyś jawnie kodować do swojego obiektu, w tym obsługę leniwego ładowania właściwości. Na przykład, jeśli obiekt ma odniesienie do innego obiektu (na przykład ze skojarzenia), niekoniecznie chcesz zawsze ładować te odniesienia, gdy pobierzesz swój rekord User, ponieważ mogą one nie być istotne przez cały czas. Lazy-loading pozwala na późniejsze wprowadzanie danych na żądanie.

Aby wykonać to leniwe ładowanie, podmiot musi mieć dostęp do Doctrine, aby mógł poprosić Doctrine o odzyskanie odpowiednich danych. Odbywa się to poprzez właściwość __initializer__, która jest dostarczana do obiektu proxy. Reszta wtedy się dzieje, obsługiwana przez Doctrine, bez twojego kodu, który musi znać szczegóły.

+0

Proszę uzupełnij swoją odpowiedź i powiedz jak! – Trix

+1

Dziwne jest to, że czasami (np. Podczas uwierzytelniania użytkowników i wywoływania użytkownika) zwraca rzeczywisty obiekt. Ale później, zwróci proxy. –

1

Czasami musimy odpowiednio określić rzeczywistą nazwę klasy dla Entity.

Doctrine używa metod statycznych, umieszczonych w klasie pomocnika: 'Doctrine \ Common \ Util \ ClassUtils', do generowania nazwy klasy proxy. Oto opis: Class ClassUtils.

W przypadku, gdy chcesz uzyskać prawdziwy nazwę klasy, wystarczy użyć:

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

Znalazłem to przydatne do rejestrowania zmian danych podmiotu (oryginalna jednostka może być określona przez id i class name).

Mam nadzieję, że było pomocne.