2012-01-22 7 views
0

$ extraPatternsプロパティを持つArticelPatternクラスがあります。このプロパティは、ExtraPattern(クラス)要素の配列です。カスタム検証のエラーがフォームに特定のフィールドに添付されない理由を教えてください。

クラスExtraPattern(注釈を使用して適用)にカスタム制約があります。

フォーム処理のために、extraPatternsコレクションフィールドを持つArticelPatternTypeクラスを作成しました。

ここで、このフォームを検証し、ArticelPattern :: extraPatternsコレクションの要素の1つによって発生する制約違反がある場合、エラーはその要素に割り当てられず、代わりにフォーム全体に割り当てられますこのエラーの原因となった適切なフォームフィールドの横にこのエラーを表示することはできません。代わりにExtraPatternクラスに私のカスタム制約を置くの

、次のように:

/** 
* @Assert\All(@AssertApl) 
*/ 
private $extraPatterns; 

しかし、同じ結果と:

/** 
* @AssertApl 
*/ 
class ExtraPattern 

私もこのように、コレクションプロパティにそれを入れてみました。このコレクションの要素によって引き起こされる@AssertApl制約エラーは、それらに割り当てられず、フォーム全体に割り当てられます。

どうすればいいですか?

答えて

4

あなたのクラスの制約はおそらくformタイプのフォームにマップされており、デフォルトでerror_bubblingが有効になっています。このオプションをfalseに設定すると、探しているものを実行する必要があります。

$builder ->add('extraPatterns', 'collection', array(
    // ... 
    'options' => array('error_bubbling' => false), 
)); 
+0

「error_bubbling」=> falseはcharmのように機能します:)しかし、私は@AssertApl制約をコレクション要素クラス(@Assert \ Allでコレクション自体ではなく)に直接置くと少しエラーがありますまだ泡立つ。 – JohnM2

1

は、同様の問題に属して:あなたのエンティティとフォームfirstNameを使用しています。 Not first_name

エンティティ(ユーザー)がfirstNameのようなフィールドを持つ場合、フォームビルダーはform_field(アンダースコア付き)フィールドの名前付けを受け入れます。それはデータを正しく保存します。しかし、このフィールドにカスタム制約を追加する場合は、アンダースコアに注意してください。使用しないでください。 camelCaseFieldNames instedを使用すると、フォームにエラーが表示され、フィールドには表示されません。

+0

素晴らしい!ここであなたはそれに関する正式な議論です:https://github.com/symfony/symfony/issues/9162 –

関連する問題