use*_*227 10 symfony doctrine-orm
我有一个问题:在一个过程中,我想取消在prePersit函数中保存实体:
/**
* @ORM\PrePersist
*/
public function setTranslationsValue2()
{
if((null===$this->getContent())or($this->getContent()==''))
{
//wanna stop saving this item???
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的函数中,我不想再保存这个实体,并且不想停止我的进程(该进程仍然保存另一个s)
您不能使用实体中的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()为true,您的域逻辑将仅保留实体.更好的方法是使用symfony2验证器验证您的实体,然后采取相应的行动.
| 归档时间: |
|
| 查看次数: |
5749 次 |
| 最近记录: |