Событие Doctrine-PHPCR-ODM не запускается
У меня есть документ doctrine-phpcr-odm с именем article, и я хочу прорезать поле перед обновлением каждой статьи.
Событие запускается для объектов doctrine-orm, но не для документов doctrine-phpcr-odm!
class ArticlePreUpdateListener
{
public function preUpdate(LifecycleEventArgs $args)
{
var_dump($args);
}
}
article.pre_update.listener:
class: AppBundle\EventListener\ArticlePreUpdateListener
tags:
- { name: doctrine.event_listener, event: preUpdate}
2 ответа
Решение
Согласно Docs, события Doctrine-PHPCR-ODM работают так же, как и события Doctrine ORM. Единственные различия:
- используйте имя тега doctrine_phpcr.event_listener соотв.
doctrine_phpcr.event_subscriber
вместоdoctrine.event_listener;
- ожидать, что аргумент будет иметь класс
Doctrine\Common\Persistence\Event\LifecycleEventArgs
,
`/**
* @Document
*/
class Article
{
[...]
/**
* @PreUpdate
* @PrePersist
*/
public function slugifiyField()
{
$this->yourField = yourSlugifyFunction($this->yourField);
}
}
Затем добавьте функцию с preUpdate
аннотация (я добавил PrePersist
слизняк при создании статьи тоже)
Изменить: Согласно вашему комментарию, я удалил HasLifeCycleCallback
аннотации, но, похоже, вы можете использовать Pre/PostUpdate
аннотации непосредственно внутри объекта документа.