2016-10-12 12 views
2

エンティティの作成、更新、または削除時に、エンティティのdoctrineを別の方法で検証します。Symfony - INSERT、UPDATE、またはDELETEでエンティティのバリデーションを異ならせる

エンティティの制約バリデータがエンティティクラスにあります。私CustomConstraintで

// src/AppBundle/Entity/AcmeEntity.php 
use AppBundle\Validator\Constraints as AcmeAssert; 

/** 
* @AcmeAssert\CustomConstraint 
*/ 
class AcmeEntity 
{ 
    // ... 
    protected $name; 

    // ... 
} 

私は、企業が、更新作成したり、特定のバリデータを実行するために削除するかどうかを決定します。

作業ユニットの使用は解決策ですか?

これを行うにはどうすればよいですか?

この問題は多くのアプリケーションで共通していると思いますか?

感謝のすべてを;)

+3

symfony2検証グループを使って、異なる制約バリデーターで切り替えることをお勧めします。 – Matteo

答えて

3

あなたはvalidation groups based on the submitted dataを使用するか、検証グループを渡すことで、フォームを作成itwhen扱うことができるのいずれか。 たとえば、コントローラでフォームを作成するとき。

$form = $this->createForm(new AcmeType(), $acme, ['validation_groups' => ['create']]); 

エンティティは次のようになります。

/** 
    * Get name 
    * 
    * @Assert\Length(min=2, max=11, groups={"create", "update"}) 
    * @AcmeAssert\ContainsAlphanumeric(groups={"create"}) // only applied when create group is passed 
    * @return string 
    */ 
    public function getName() 
    { 
     return $this->name; 
    } 
+0

実は、goupsで検証を行い、Entityバリデーターを実行する前にバリデーションのタイプを決定する方が理にかなっています。ご回答有難うございます ! –

1

これは、検証グループが作成するものです。

symfonyのフォームを使用すると、ドキュメントにこれらの記事を見ていると思いますエンティティの注釈から検証を読んで、内部的に検証コンポーネントを使用するので:

関連する問題