SlideShare une entreprise Scribd logo
1  sur  18
Télécharger pour lire hors ligne
Presentation title here
Событийная система в
Doctrine2
Сергей Журавель
szhuravel@magecore.com
https://github.com/sergeyz
Presentation title here
Doctrine предоставляет возможность расширять свою логику с помощью
событийной системы
DoctrineORMEvents
Presentation title here
DoctrineORMEvents::prePersist
● $entityManager->persist($entity)
● Для связей c cascade={"persist"}
● $entityManager->flush() для новых сущностей в связях при cascade=
{"persist"}
● $entityManager->merge($entity)
● $unitOfWork->computeChangeSet($classMetadata, $entity) для новых
сущностей в связях при cascade={"persist"}
● На этом этапе в сущностях нету
идентификатора
● Изменения связей в подписчике не учитываются
Presentation title here
DoctrineORMEvents::preRemove
● $entityManager->remove($entity)
● Для связей с cascade={"remove"}
● Изменения полей в подписчике не
учитываются
● Изменения связей в подписчике не
учитываются
Presentation title here
DoctrineORMEvents::preFlush
● $entityManager->flush()
● $unitOfWork->computeChangeSet($classMetadata, $entity)
● На этом событии можно
вызывать $entityManager-
>flush() без ограничений
Presentation title here
DoctrineORMEvents::onFlush
● $entityManager->flush() после вычислений changeSet
● Имеет доступ ко всем изменениям
foreach ($uow->getScheduledEntityInsertions() as $entity) {}
foreach ($uow->getScheduledEntityUpdates() as $entity) {}
foreach ($uow->getScheduledEntityDeletions() as $entity) {}
foreach ($uow->getScheduledCollectionDeletions() as $collection) {}
foreach ($uow->getScheduledCollectionUpdates() as $collection) {}
Presentation title here
DoctrineORMEvents::onFlush
● Создавать сущности можно только пересчитав их changeSet
$unitOfWork->computeChangeSet($classMetadata, $entity)
● Изменения в связанных сущностях нужно пересчитывать
$unitOfWork->recomputeSingleEntityChangeSet($classMetadata, $entity)
● Если changeSets пустые будет вызван даже с пустым changeSet
Presentation title here
DoctrineORMEvents::postFlush
● Перед завершением $entityManager->flush()
● Если changeSets пустые будет вызван даже с пустым changeSet
● Вызывать $entityManager->flush() в
подписчике на этом событии не
рекомендовано
Presentation title here
DoctrineORMEvents::preUpdate
● Перед обновлением сущности в $entityManager->flush()
● Пересчитывать chageSet не нужно
● Не вызывается если changeSet пустой
Presentation title here
DoctrineORMEvents::preUpdate
● Не разрешается менять скаляры напрямую, только с помощью
DoctrineORMEventPreUpdateEventArgs $args->setNewValue('field',
'value')
● $entityManager->persist($entity) или $entityManager->remove($entity)
даже с использованием $unitOfWork могут привести к unexpected
behavior
● Не разрешается менять сущности в связях
Presentation title here
DoctrineORMEvents::postUpdate
DoctrineORMEvents::postRemove
DoctrineORMEvents::postPersist
● После соответствующих действий
● Изменения в сущностях не
учитываются
Presentation title here
DoctrineORMEvents::postLoad
● При создании новой сущности
после гидрации
● При очистке гидратора
DoctrineORMEvents::onClear
● При очистке $entityManager-
>clear() после $entityManager-
>flush()
Presentation title here
Подписки
Event Listener Event Subscriber
Entity Listener
Presentation title here
ClassMetadata события
● DoctrineORMEvents::DoctrineORMEvents::loadClassMetadata
○ После чтения маппингов и создании
DoctrineORMMappingClassMetadataInfo на их основании
● DoctrineORMEvents::DoctrineORMEvents::
onClassMetadataNotFound
○ Если данные для сущности не найдены, можно добавить fallback
Presentation title here
Аргументы
● DoctrineORMEventLifecycleEventArgs (OnFlushEventArgs,
PostFlushEventArgs, PreFlushEventArgs)
○ public function getEntity()
○ public function getEntityManager()
○ public function getObject()
○ public function getObjectManager()
● DoctrineORMEventOnClassMetadataNotFoundEventArgs
○ public function setFoundMetadata(ClassMetadata $classMetadata =
null)
○ public function getFoundMetadata()
○ public function getClassName()
Presentation title here
Аргументы
● DoctrineORMEventLoadClassMetadataEventArgs
○ public function getClassMetadata()
● DoctrineORMEventOnClearEventArgs
○ public function getEntityClass()
○ public function clearsAllEntities()
● DoctrineORMEventPreUpdateEventArgs
○ public function getEntityChangeSet()
○ public function hasChangedField($field)
○ public function getOldValue($field)
○ public function getNewValue($field)
○ public function setNewValue($field, $value)
Presentation title here
Read more...
● http://doctrine-orm.readthedocs.org/en/latest/reference/events.html
● http://odiszapc.ru/doctrine/events/
● http://symfony.
com/doc/current/cookbook/doctrine/event_listeners_subscribers.html
Presentation title here
KEEP CALM
AND
ASK QUESTIONS

Contenu connexe

Tendances

YiiConf 2012 - Alexander Makarov - Yii2, что нового
YiiConf 2012 - Alexander Makarov - Yii2, что новогоYiiConf 2012 - Alexander Makarov - Yii2, что нового
YiiConf 2012 - Alexander Makarov - Yii2, что новогоAlexander Makarov
 
PVS-Studio в 2021 - Примеры ошибок
PVS-Studio в 2021 - Примеры ошибокPVS-Studio в 2021 - Примеры ошибок
PVS-Studio в 2021 - Примеры ошибокAndrey Karpov
 
Григорий Демченко, Универсальный адаптер
Григорий Демченко, Универсальный адаптерГригорий Демченко, Универсальный адаптер
Григорий Демченко, Универсальный адаптерSergey Platonov
 
Yii development
Yii developmentYii development
Yii developmentMageCloud
 
I tmozg js_school_jquery
I tmozg js_school_jqueryI tmozg js_school_jquery
I tmozg js_school_jqueryITmozg
 
XPath локаторы в Selenium WebDriver
XPath локаторы в Selenium WebDriverXPath локаторы в Selenium WebDriver
XPath локаторы в Selenium WebDriverИлья Кожухов
 
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Vasya Petrov
 
Алексей Плеханов: 25 причин попробовать Laravel
Алексей Плеханов: 25 причин попробовать LaravelАлексей Плеханов: 25 причин попробовать Laravel
Алексей Плеханов: 25 причин попробовать LaravelOleg Poludnenko
 
Angular 2: Всех переиграл
Angular 2: Всех переигралAngular 2: Всех переиграл
Angular 2: Всех переигралEugene Zharkov
 
Реализация шаблонов корпоративных приложений в Magento
Реализация шаблонов корпоративных приложений в MagentoРеализация шаблонов корпоративных приложений в Magento
Реализация шаблонов корпоративных приложений в MagentoMagecom Ukraine
 
5.1 Перегрузка операторов
5.1 Перегрузка операторов5.1 Перегрузка операторов
5.1 Перегрузка операторовDEVTYPE
 
Entity framework
Entity frameworkEntity framework
Entity frameworkScaiper
 
функции в Java script
функции в Java scriptфункции в Java script
функции в Java scriptViktor Andreev
 
Примеры решения типичных задач за рамками ядра Yii2
Примеры решения типичных задач за рамками ядра Yii2Примеры решения типичных задач за рамками ядра Yii2
Примеры решения типичных задач за рамками ядра Yii2Paul Klimov
 
Индексирование в Magento
Индексирование в MagentoИндексирование в Magento
Индексирование в MagentoMagecom Ukraine
 
Веселая ферма. Соседи.
Веселая ферма. Соседи.Веселая ферма. Соседи.
Веселая ферма. Соседи.Doomer Samoiloff
 

Tendances (18)

Swift School #4
Swift School #4Swift School #4
Swift School #4
 
YiiConf 2012 - Alexander Makarov - Yii2, что нового
YiiConf 2012 - Alexander Makarov - Yii2, что новогоYiiConf 2012 - Alexander Makarov - Yii2, что нового
YiiConf 2012 - Alexander Makarov - Yii2, что нового
 
PVS-Studio в 2021 - Примеры ошибок
PVS-Studio в 2021 - Примеры ошибокPVS-Studio в 2021 - Примеры ошибок
PVS-Studio в 2021 - Примеры ошибок
 
Vuejs composition API
Vuejs composition APIVuejs composition API
Vuejs composition API
 
Григорий Демченко, Универсальный адаптер
Григорий Демченко, Универсальный адаптерГригорий Демченко, Универсальный адаптер
Григорий Демченко, Универсальный адаптер
 
Yii development
Yii developmentYii development
Yii development
 
I tmozg js_school_jquery
I tmozg js_school_jqueryI tmozg js_school_jquery
I tmozg js_school_jquery
 
XPath локаторы в Selenium WebDriver
XPath локаторы в Selenium WebDriverXPath локаторы в Selenium WebDriver
XPath локаторы в Selenium WebDriver
 
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1
 
Алексей Плеханов: 25 причин попробовать Laravel
Алексей Плеханов: 25 причин попробовать LaravelАлексей Плеханов: 25 причин попробовать Laravel
Алексей Плеханов: 25 причин попробовать Laravel
 
Angular 2: Всех переиграл
Angular 2: Всех переигралAngular 2: Всех переиграл
Angular 2: Всех переиграл
 
Реализация шаблонов корпоративных приложений в Magento
Реализация шаблонов корпоративных приложений в MagentoРеализация шаблонов корпоративных приложений в Magento
Реализация шаблонов корпоративных приложений в Magento
 
5.1 Перегрузка операторов
5.1 Перегрузка операторов5.1 Перегрузка операторов
5.1 Перегрузка операторов
 
Entity framework
Entity frameworkEntity framework
Entity framework
 
функции в Java script
функции в Java scriptфункции в Java script
функции в Java script
 
Примеры решения типичных задач за рамками ядра Yii2
Примеры решения типичных задач за рамками ядра Yii2Примеры решения типичных задач за рамками ядра Yii2
Примеры решения типичных задач за рамками ядра Yii2
 
Индексирование в Magento
Индексирование в MagentoИндексирование в Magento
Индексирование в Magento
 
Веселая ферма. Соседи.
Веселая ферма. Соседи.Веселая ферма. Соседи.
Веселая ферма. Соседи.
 

En vedette

Doctrine Internals. UnitOfWork
Doctrine Internals. UnitOfWorkDoctrine Internals. UnitOfWork
Doctrine Internals. UnitOfWorkAndrew Yatsenko
 
Scalability
ScalabilityScalability
Scalabilitysergeyz
 
Effective Doctrine2: Performance Tips for Symfony2 Developers
Effective Doctrine2: Performance Tips for Symfony2 DevelopersEffective Doctrine2: Performance Tips for Symfony2 Developers
Effective Doctrine2: Performance Tips for Symfony2 DevelopersMarcin Chwedziak
 
Data cache management in php
Data cache management in phpData cache management in php
Data cache management in phpAndrew Yatsenko
 
Understanding Doctrine at True North PHP 2013
Understanding Doctrine at True North PHP 2013Understanding Doctrine at True North PHP 2013
Understanding Doctrine at True North PHP 2013Juti Noppornpitak
 
Symfony2 and Doctrine2 Integration
Symfony2 and Doctrine2 IntegrationSymfony2 and Doctrine2 Integration
Symfony2 and Doctrine2 IntegrationJonathan Wage
 
ORM dont kill your DB, developers do
ORM dont kill your DB, developers doORM dont kill your DB, developers do
ORM dont kill your DB, developers doGuilherme Blanco
 
Magento 2.1 ee content staging
Magento 2.1 ee content stagingMagento 2.1 ee content staging
Magento 2.1 ee content stagingAnton Kaplya
 
Caching basics in PHP
Caching basics in PHPCaching basics in PHP
Caching basics in PHPAnis Ahmad
 
Doctrine In The Real World sflive2011 Paris
Doctrine In The Real World sflive2011 ParisDoctrine In The Real World sflive2011 Paris
Doctrine In The Real World sflive2011 ParisJonathan Wage
 
Doctrine 2 - Not The Same Old Php Orm
Doctrine 2 - Not The Same Old Php OrmDoctrine 2 - Not The Same Old Php Orm
Doctrine 2 - Not The Same Old Php OrmJonathan Wage
 

En vedette (14)

Doctrine Internals. UnitOfWork
Doctrine Internals. UnitOfWorkDoctrine Internals. UnitOfWork
Doctrine Internals. UnitOfWork
 
Scalability
ScalabilityScalability
Scalability
 
Effective Doctrine2: Performance Tips for Symfony2 Developers
Effective Doctrine2: Performance Tips for Symfony2 DevelopersEffective Doctrine2: Performance Tips for Symfony2 Developers
Effective Doctrine2: Performance Tips for Symfony2 Developers
 
Data cache management in php
Data cache management in phpData cache management in php
Data cache management in php
 
Using Oro layouts
Using Oro layoutsUsing Oro layouts
Using Oro layouts
 
Understanding Doctrine at True North PHP 2013
Understanding Doctrine at True North PHP 2013Understanding Doctrine at True North PHP 2013
Understanding Doctrine at True North PHP 2013
 
Symfony2. Database and Doctrine
Symfony2. Database and DoctrineSymfony2. Database and Doctrine
Symfony2. Database and Doctrine
 
Symfony2 and Doctrine2 Integration
Symfony2 and Doctrine2 IntegrationSymfony2 and Doctrine2 Integration
Symfony2 and Doctrine2 Integration
 
ORM dont kill your DB, developers do
ORM dont kill your DB, developers doORM dont kill your DB, developers do
ORM dont kill your DB, developers do
 
Magento 2.1 ee content staging
Magento 2.1 ee content stagingMagento 2.1 ee content staging
Magento 2.1 ee content staging
 
Caching basics in PHP
Caching basics in PHPCaching basics in PHP
Caching basics in PHP
 
Doctrine ORM & model
Doctrine ORM & modelDoctrine ORM & model
Doctrine ORM & model
 
Doctrine In The Real World sflive2011 Paris
Doctrine In The Real World sflive2011 ParisDoctrine In The Real World sflive2011 Paris
Doctrine In The Real World sflive2011 Paris
 
Doctrine 2 - Not The Same Old Php Orm
Doctrine 2 - Not The Same Old Php OrmDoctrine 2 - Not The Same Old Php Orm
Doctrine 2 - Not The Same Old Php Orm
 

Similaire à ORO Meetups - Doctrine Events

ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)ZFConf Conference
 
ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...
ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...
ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...Alexey Paznikov
 
PostgreSQL Vacuum: Nine Circles of Hell
PostgreSQL Vacuum: Nine Circles of HellPostgreSQL Vacuum: Nine Circles of Hell
PostgreSQL Vacuum: Nine Circles of HellAlexey Lesovsky
 
Unit test быстрый старт
Unit test быстрый стартUnit test быстрый старт
Unit test быстрый стартAntonio
 
Batch processing in rails
Batch processing in railsBatch processing in rails
Batch processing in railssergeymoiseev
 
SECON'2017, Лесовский Алексей, Потоковая репликация в PostgreSQL.
SECON'2017, Лесовский Алексей, Потоковая репликация в PostgreSQL.SECON'2017, Лесовский Алексей, Потоковая репликация в PostgreSQL.
SECON'2017, Лесовский Алексей, Потоковая репликация в PostgreSQL.SECON
 
PostgreSQL Streaming Replication
PostgreSQL Streaming ReplicationPostgreSQL Streaming Replication
PostgreSQL Streaming ReplicationAlexey Lesovsky
 
Magento - Антон Капля
Magento - Антон КапляMagento - Антон Капля
Magento - Антон Капляmeet_magento
 
Использование юнит-тестов для повышения качества разработки
Использование юнит-тестов для повышения качества разработкиИспользование юнит-тестов для повышения качества разработки
Использование юнит-тестов для повышения качества разработкиvictor-yastrebov
 
10 задач администрирования Active directory, решаемых с помощью power shell
10 задач администрирования Active directory, решаемых с помощью power shell10 задач администрирования Active directory, решаемых с помощью power shell
10 задач администрирования Active directory, решаемых с помощью power shellAndrey Markin
 
Everything You Need to Know About WP_Query, WordCamp Russia 2014
Everything You Need to Know About WP_Query, WordCamp Russia 2014Everything You Need to Know About WP_Query, WordCamp Russia 2014
Everything You Need to Know About WP_Query, WordCamp Russia 2014Sergey Biryukov
 
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...Ontico
 

Similaire à ORO Meetups - Doctrine Events (14)

ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)
 
ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...
ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...
ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...
 
PostgreSQL Vacuum: Nine Circles of Hell
PostgreSQL Vacuum: Nine Circles of HellPostgreSQL Vacuum: Nine Circles of Hell
PostgreSQL Vacuum: Nine Circles of Hell
 
Unit test быстрый старт
Unit test быстрый стартUnit test быстрый старт
Unit test быстрый старт
 
Batch processing in rails
Batch processing in railsBatch processing in rails
Batch processing in rails
 
SECON'2017, Лесовский Алексей, Потоковая репликация в PostgreSQL.
SECON'2017, Лесовский Алексей, Потоковая репликация в PostgreSQL.SECON'2017, Лесовский Алексей, Потоковая репликация в PostgreSQL.
SECON'2017, Лесовский Алексей, Потоковая репликация в PostgreSQL.
 
PostgreSQL Streaming Replication
PostgreSQL Streaming ReplicationPostgreSQL Streaming Replication
PostgreSQL Streaming Replication
 
Magento - Антон Капля
Magento - Антон КапляMagento - Антон Капля
Magento - Антон Капля
 
Triggers для Mysql
Triggers для MysqlTriggers для Mysql
Triggers для Mysql
 
Использование юнит-тестов для повышения качества разработки
Использование юнит-тестов для повышения качества разработкиИспользование юнит-тестов для повышения качества разработки
Использование юнит-тестов для повышения качества разработки
 
Dependency injection, phemto
Dependency injection, phemtoDependency injection, phemto
Dependency injection, phemto
 
10 задач администрирования Active directory, решаемых с помощью power shell
10 задач администрирования Active directory, решаемых с помощью power shell10 задач администрирования Active directory, решаемых с помощью power shell
10 задач администрирования Active directory, решаемых с помощью power shell
 
Everything You Need to Know About WP_Query, WordCamp Russia 2014
Everything You Need to Know About WP_Query, WordCamp Russia 2014Everything You Need to Know About WP_Query, WordCamp Russia 2014
Everything You Need to Know About WP_Query, WordCamp Russia 2014
 
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
 

ORO Meetups - Doctrine Events

  • 1. Presentation title here Событийная система в Doctrine2 Сергей Журавель szhuravel@magecore.com https://github.com/sergeyz
  • 2. Presentation title here Doctrine предоставляет возможность расширять свою логику с помощью событийной системы DoctrineORMEvents
  • 3. Presentation title here DoctrineORMEvents::prePersist ● $entityManager->persist($entity) ● Для связей c cascade={"persist"} ● $entityManager->flush() для новых сущностей в связях при cascade= {"persist"} ● $entityManager->merge($entity) ● $unitOfWork->computeChangeSet($classMetadata, $entity) для новых сущностей в связях при cascade={"persist"} ● На этом этапе в сущностях нету идентификатора ● Изменения связей в подписчике не учитываются
  • 4. Presentation title here DoctrineORMEvents::preRemove ● $entityManager->remove($entity) ● Для связей с cascade={"remove"} ● Изменения полей в подписчике не учитываются ● Изменения связей в подписчике не учитываются
  • 5. Presentation title here DoctrineORMEvents::preFlush ● $entityManager->flush() ● $unitOfWork->computeChangeSet($classMetadata, $entity) ● На этом событии можно вызывать $entityManager- >flush() без ограничений
  • 6. Presentation title here DoctrineORMEvents::onFlush ● $entityManager->flush() после вычислений changeSet ● Имеет доступ ко всем изменениям foreach ($uow->getScheduledEntityInsertions() as $entity) {} foreach ($uow->getScheduledEntityUpdates() as $entity) {} foreach ($uow->getScheduledEntityDeletions() as $entity) {} foreach ($uow->getScheduledCollectionDeletions() as $collection) {} foreach ($uow->getScheduledCollectionUpdates() as $collection) {}
  • 7. Presentation title here DoctrineORMEvents::onFlush ● Создавать сущности можно только пересчитав их changeSet $unitOfWork->computeChangeSet($classMetadata, $entity) ● Изменения в связанных сущностях нужно пересчитывать $unitOfWork->recomputeSingleEntityChangeSet($classMetadata, $entity) ● Если changeSets пустые будет вызван даже с пустым changeSet
  • 8. Presentation title here DoctrineORMEvents::postFlush ● Перед завершением $entityManager->flush() ● Если changeSets пустые будет вызван даже с пустым changeSet ● Вызывать $entityManager->flush() в подписчике на этом событии не рекомендовано
  • 9. Presentation title here DoctrineORMEvents::preUpdate ● Перед обновлением сущности в $entityManager->flush() ● Пересчитывать chageSet не нужно ● Не вызывается если changeSet пустой
  • 10. Presentation title here DoctrineORMEvents::preUpdate ● Не разрешается менять скаляры напрямую, только с помощью DoctrineORMEventPreUpdateEventArgs $args->setNewValue('field', 'value') ● $entityManager->persist($entity) или $entityManager->remove($entity) даже с использованием $unitOfWork могут привести к unexpected behavior ● Не разрешается менять сущности в связях
  • 11. Presentation title here DoctrineORMEvents::postUpdate DoctrineORMEvents::postRemove DoctrineORMEvents::postPersist ● После соответствующих действий ● Изменения в сущностях не учитываются
  • 12. Presentation title here DoctrineORMEvents::postLoad ● При создании новой сущности после гидрации ● При очистке гидратора DoctrineORMEvents::onClear ● При очистке $entityManager- >clear() после $entityManager- >flush()
  • 13. Presentation title here Подписки Event Listener Event Subscriber Entity Listener
  • 14. Presentation title here ClassMetadata события ● DoctrineORMEvents::DoctrineORMEvents::loadClassMetadata ○ После чтения маппингов и создании DoctrineORMMappingClassMetadataInfo на их основании ● DoctrineORMEvents::DoctrineORMEvents:: onClassMetadataNotFound ○ Если данные для сущности не найдены, можно добавить fallback
  • 15. Presentation title here Аргументы ● DoctrineORMEventLifecycleEventArgs (OnFlushEventArgs, PostFlushEventArgs, PreFlushEventArgs) ○ public function getEntity() ○ public function getEntityManager() ○ public function getObject() ○ public function getObjectManager() ● DoctrineORMEventOnClassMetadataNotFoundEventArgs ○ public function setFoundMetadata(ClassMetadata $classMetadata = null) ○ public function getFoundMetadata() ○ public function getClassName()
  • 16. Presentation title here Аргументы ● DoctrineORMEventLoadClassMetadataEventArgs ○ public function getClassMetadata() ● DoctrineORMEventOnClearEventArgs ○ public function getEntityClass() ○ public function clearsAllEntities() ● DoctrineORMEventPreUpdateEventArgs ○ public function getEntityChangeSet() ○ public function hasChangedField($field) ○ public function getOldValue($field) ○ public function getNewValue($field) ○ public function setNewValue($field, $value)
  • 17. Presentation title here Read more... ● http://doctrine-orm.readthedocs.org/en/latest/reference/events.html ● http://odiszapc.ru/doctrine/events/ ● http://symfony. com/doc/current/cookbook/doctrine/event_listeners_subscribers.html
  • 18. Presentation title here KEEP CALM AND ASK QUESTIONS