嗨,我有一个 prePersist 和 preUpdate 监听器:
<?php
namespace FM\AppBundle\EventListener;
use Doctrine\ORM\Event\LifecycleEventArgs;
use FM\AdminBundle\Entity\Address\DeliveryAddress;
class DeliveryAddressListener
{
/**
* @param LifecycleEventArgs $args
*/
public function prePersist(LifecycleEventArgs $args)
{
$entity = $args->getEntity();
if(!$entity instanceof DeliveryAddress){
return;
}
$this->addNameToUser($args);
$this->addPostalToUser($args);
}
/**
* @param LifecycleEventArgs $args
*/
public function preUpdate(LifecycleEventArgs $args)
{
$entity = $args->getEntity();
if(!$entity instanceof DeliveryAddress){
return;
}
$this->addPostalToUser($args);
}
/**
* @param LifecycleEventArgs $args
*/
public function addNameToUser(LifecycleEventArgs $args)
{
/** @var DeliveryAddress $deliveryAdress */
$deliveryAdress = $args->getEntity();
$user = $deliveryAdress->getOwner();
if(empty($user->getFirstName())) $user->setFirstName($deliveryAdress->getFirstName());
if(empty($user->getLastName())) $user->setLastName($deliveryAdress->getLastName());
}
/**
* @param LifecycleEventArgs $args
*/
public function addPostalToUser(LifecycleEventArgs $args)
{
/** @var DeliveryAddress $deliveryAdress */
$deliveryAdress = $args->getEntity();
$user = $deliveryAdress->getOwner();
$user->setPostalCode($deliveryAdress->getZipCode());
}
}
service.yml:
delivery_address.listener:
class: FM\AppBundle\EventListener\DeliveryAddressListener
tags:
- { name: doctrine.event_listener, event: prePersist }
- { name: doctrine.event_listener, event: preUpdate }
prePersist 工作正常。但 preUpdate 不会保留任何内容。
当我在 addPostalToUser() 函数中添加以下代码时,我的 nginx 服务器崩溃了:
$args->getEntityManager()->persist($deliveryAdress);
$args->getEntityManager()->flush();
最佳答案
您的问题是,在此事件中不允许更改已更新实体的关联。因此更改 DeliveryAddress 上的用户关联将不起作用。
您可以使用 onFlush listener 来执行此操作- 这需要更多的工作,但会做你想要的事情。
关于php - preUpdate Doctrine Listener 中的 Symfony 刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37817582/