首页 > 解决方案 > 如何中止 PrePersist 函数的查询执行?

问题描述

我目前正在使用sonata adminDoctrine ORM进行synfomy 4.2项目。

我想在某些条件设置为 true 时中止查询执行,例如,如果我想插入一个新产品,但由于某种原因该产品缺少参数 price,那么我想中止该查询并设置一条消息,让用户知道该产品无法创建,因为它缺乏价格。

我已经完成了研究,但找不到与我的问题相关的任何内容,我知道此功能必须应用于实体上的 PrePersist 函数。

我一直在用这样的东西打破我的头。

/**
* @ORM\PrePersist
*/
public function prePersist(LifecycleEventArgs $args)
{
    $em = $args->getEntityManager("App\Milenio\VersionsControlBundle\Entity\Plugins");
    $em->getConnection();
    $em->flush();
    $em->clear();
}

但这当然什么也没做,我仍然会导致明显的 SQL 异常。

我知道有办法告诉奏鸣曲管理员需要输入,但在我的特殊情况下不会成功。

标签: phpdoctrinesonata-adminsymfony-4.2

解决方案


强迫用户填写价格,或者只是让价格不可为空,并在控制器中捕获错误,然后向用户发送消息,这些东西是更清洁的解决方案并且不需要侦听器,这不是更有意义吗? . 此外,我认为您不能在 prepersist 中刷新,也许 entitymanager->rollback 或 entitymanager detach 是您正在寻找的


推荐阅读