11

問題が 1 つあります。プロセスで、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 イベントをリッスンし、問題のタイプのエンティティが永続化を要求しているかどうかを確認し、条件が true かどうかを確認します。その場合、entityManager にエンティティをデタッチするように指示できます。

しかし、コンテンツをnotNullに設定し、長さが 1 未満の場合はコンテンツを null に変換することで、もっと簡単にできると思います。正しいエンティティを永続化することはドメイン ロジックの一部であり、エンティティ自体またはいくつかのイベントリスナー。そのようなリスナーと条件が多数ある場合、誰も知らない多くの魔法の制約が発生します。

上記のアプローチの他に、valid() メソッドを実装して、特定の条件が満たされているかどうかを確認できます。ドメイン ロジックは、valid() が true の場合にのみエンティティを永続化します。さらに良いアプローチは、symfony2 バリデーターを使用してエンティティーを検証し、それに応じて行動することです。

于 2012-07-04T11:03:13.147 に答える
1

new Exception("Some message..."); をスローするだけです。

于 2013-10-16T18:57:46.643 に答える