我有一个问题:在一个过程中,我想取消在prePersit函数中保存实体:
/**
* @ORM\PrePersist
*/
public function setTranslationsValue2()
{
if((null===$this->getContent())or($this->getContent()==''))
{
//wanna stop saving this item???
return false;
}
}
在上述功能中,我不想再保存此实体,也不想停止我的进程(该进程仍然保存另一个)
答案 0 :(得分:5)
您不能使用实体中的prePersist注释来执行此操作。您的方法存在的问题是您无法访问模型中的entityManager,但您需要告诉他不要坚持您的实体。
中的说明使用事件监听器然后你会听prePersist事件,看看有问题类型的任何实体是否要求持久化,看看你的情况是否属实。如果是这样,您可以告诉entityManager分离实体。
但是我想你可以通过将内容设置为notNull并将内容转换为null(如果length为< 1.确保持久化正确的实体是域逻辑的一部分,我不会在实体本身或某些事件监听器中执行此操作。如果你有许多这样的听众和条件,你最终会得到许多人都不知道的神奇约束。
除了上述方法,您还可以实现valid()方法并检查是否满足某些条件。如果valid()为true,您的域逻辑将仅保留实体。更好的方法是使用symfony2验证器来验证您的实体,然后采取相应的行动。
答案 1 :(得分:2)
抛出新的例外("一些消息......");