2012-01-24 5 views
2

私のフォームにはフィールドentityがあります。フォームの送信時にそのエンティティの検証を無効にするにはどうすればよいですか?このエンティティはすでにデータベースに保持されているため、バリデータが自分の視点からこのエンティティを検証する必要はありません。エンティティフォームフィールドと検証はSymfony2でですか?

EDIT:

コードは次のようになります。

class SearchRequest 
{ 
    /** 
    * @ORM\ManyToOne(targetEntity="ArticlePattern") 
    * @ORM\JoinColumn(name="article_pattern_id", onDelete="CASCADE") 
    * @Assert\NotBlank 
    */ 
    private $articlePattern; 
} 

フォームフィールド:

$builder 
    ->add('articlePattern', 'entity', array('class' => 'LonbitItssBundle:ArticlePattern') 

検証グループは動作しませんが私が達成したいことのバリデータ用であるため、 $articlePatternフィールドの制約@Assert\NotBlankを確認してください。しかし、私は彼がcで定義された制約をチェックしないようにしますぼんやりしたArticlePattern。つまり、バリデーターが$ articlePatternオブジェクト内で降下しないようにしたいのですが、$ articlePatternフィールド自体に置かれた制約を検証する必要があります。

どうすればいいですか?

EDIT2:

検証グループに動作します。だから、最終的な解決策は、このように、SearchRequestクラスのすべてのフィールドアサーションに(グループの名前は任意)groups={"search_request"}制約オプションを追加することです:

/** 
* @Assert\NotBlank(groups={"search_request"}) 
*/ 
private $articlePattern; 

その方法は、検証は彼らを想定した(関連オブジェクトに降りません所属しない - この場合は "search_request"グループ)。

+0

フィールドを 'disabled'または' readonly'として設定するのはどうですか? – jere

答えて

4

1)このフィールドを無効にしたい場合は、クラスフォームで使用しないでください。 validation groupsを使用し、

public function buildForm(FormBuilder $builder, array $options) 
{ 
     $builder 
      ->add('content') 
      ->add('username') 
      //->add('yourEntity') 
     ; 
} 

2)以上(およびテンプレートから削除します)。あなたのエンティティクラスで

public function getDefaultOptions(array $options) 
{ 
     return array(
      'data_class' => 'Sybio\BuzzBundle\Entity\SearchRequest', 
      'csrf_protection' => true, 
      'csrf_field_name' => '_token', 
      'intention'  => '865c0c0b4ab0e063e5caa3387c1a8741', 
      'validation_groups' => array('without_article_pattern_ckecking'), 
     ); 
} 

:あなたは、あなたのバリデータの実体を呼び出して、あなたはあなたのクラスフォームでこのグループを使用しないvalidation_groupを作成

/** 
* @ORM\ManyToOne(targetEntity="ArticlePattern") 
* @ORM\JoinColumn(name="article_pattern_id", onDelete="CASCADE") 
* @Assert\NotBlank(
* groups={"without_article_pattern_ckecking"} 
*) 
*/ 
private $articlePattern; 

をフォームにのみ参照するバリデータを検証しますto_article_pattern_ckeckingグループに渡すので、この検証グループがない場合は、ArticlePatternエンティティ内のバリデータをテストすべきではありません。

私はこれがあなたを助けてくれることを願っています!

+0

私が書いたように、このフィールドをフォームに含めたいので、validation_groupsが答えになるかもしれません。私はそれをチェックします。 – JohnM2

+0

私はそれがそれではないことを謝罪しています。私はコードと私の質問にいくつかの説明が含まれています。 – JohnM2

+0

通常、これを行うことによって: /** * @ORM \ ManyToOne(targetEntity = "ArticlePattern") * @ORM \ JoinColumn(= "article_pattern_id" 名、onDelete = "CASCADE") * @assert \ NotBlank ( * groups = {"without_article_pattern_ckecking"} *) */ private $ articlePattern;フォームクラスで :彼らは持っていない場合、それはあなたのArticlePatternエンティティ内のバリデータをテストするべきではありませんので 「validation_groups」=>配列(「without_article_pattern_ckecking」)は、 フォームは唯一、without_article_pattern_ckeckingグループを参照するバリデータを検証しますこの検証グループ:o! – Sybio

関連する問題