11

我有一个问题:在一个过程中,我想取消在 prePersit 函数中保存实体:

/**
 * @ORM\PrePersist
 */
public function setTranslationsValue2()
{
    if((null===$this->getContent())or($this->getContent()==''))
    {
        //wanna stop saving this item???
       return false;
    }
}

在上面的函数中,我不想再保存这个实体,也不想停止我的进程(该进程仍然保存另一个s)

4

2 回答 2

6

您不能在实体中使用 prePersist 注释来做到这一点。您的方法的问题是您无法访问模型中的 entityManager ,但您需要告诉他不要坚持您的实体。

您可以按照教义文档中的说明使用事件侦听器:http: //docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/events.html#implementing-event-listeners

然后,您将监听 prePersist 事件,查看是否有任何类型的实体要求持久化,并查看您的条件是否为真。如果是这样,您可以告诉 entityManager 分离实体。

我想你可以通过将内容设置为 notNull 并将内容转换为 null 如果长度 < 1 来做更简单的事情。确保保留正确的实体是你的域逻辑的一部分,我不会在实体本身或一些事件监听器。如果你有很多这样的听众和条件,你最终会遇到许多没人知道的神奇约束。

除了上述方法之外,您还可以实现一个 valid() 方法并检查是否满足某些条件。如果 valid() 为真,您的域逻辑只会保留实体。更好的方法是使用 symfony2 验证器来验证您的实体,然后采取相应的行动。

于 2012-07-04T11:03:13.147 回答
1

只需抛出 new Exception("Some message...");

于 2013-10-16T18:57:46.643 回答