2017-02-08 5 views
1

をエラーを追加します(TextTypeフィールドの位置)フィールドsymfonyのフォームイベントは私のシナリオは次のようである特定の分野に

これは、イベントリスナーを持つ形である:

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder->add(
     'maxRedemptionForDiscount', 
     ChoiceType::class, 
     [ 
      'placeholder'  => false, 
      'multiple'   => false, 
      'choices'   => [ 
       true => 'discount.form_fields.set_max_redemptions', 
       false => 'discount.form_fields.unlimited', 
      ], 
      'label'    => 'discount.form_fields.max_redemption_for_discount', 
      'translation_domain' => 'entities', 
      'required'   => false, 
      'error_bubbling'  => true, 
      'attr'    => [ 
       'class' => 'maxRedemptionForDiscountSelect', 
      ], 
     ] 
    )->add(
     'maxRedemptionForDiscountValue', 
     TextType::class, 
     [ 
      'label'    => 'discount.form_fields.set_max_redemptions', 
      'translation_domain' => 'entities', 
      'required'   => false, 
     ] 
    )->addEventListener(
     FormEvents::PRE_SUBMIT, 
     [$this, 'onPreSubmit'] 
    ); 
} 

これはonPreSubmit関数である:

{{ form_row(form.maxRedemptionForDiscount) }} 

<div id="maxRedemptionForDiscountValue"> 
    {{ form_row(form.maxRedemptionForDiscountValue) }} 
</div> 

これは、フォーム上のエラーメッセージをレンダリングする:ここ

/** 
* @param FormEvent $event 
*/ 
public function onPreSubmit(FormEvent $event) 
{ 
    $data = $event->getData(); 
    $form = $event->getForm(); 

    if ($data['maxRedemptionForDiscount'] == 1) { 
     if ($data['maxRedemptionForDiscountValue'] == 0) { 
      $form->addError(new FormError('error message')); 
     } 
    } 
    $event->setData($data); 
} 
は小枝コードです。 しかし、私は特定のフィールドにエラーメッセージを表示したい。

これは動作しません:

$form->get('maxRedemptionForDiscountValue')->addError(new FormError('error message')); 

私はこれをしようとすると、エラーメッセージが私のフォームの上部に消えますが、特定のフィールドの位置に表示されないでしょう。

私はここで間違っていますか?

答えて

0

まず、error_bubblingfalseに設定するか、デフォルトの動作として削除してください。

trueの場合、ドキュメントは

を述べたように、このフィールドのすべてのエラーは、親フィールドまたはフォームに渡されます。たとえば、通常のフィールドでtrueに設定されている場合、そのフィールドのエラーは特定のフィールドではなくメインフォームに付加されます。特にChoiceType

このフィールドにエラーが代わりに親フィールド(ほとんどの場合フォーム)のフィールドに添付する必要がありますセットの

第二には、あなたが

$form 
    ->get('maxRedemptionForDiscountValue') 
    ->addError(new FormError('error message')); 

第三に、特定のフォームフィールドにエラーを追加する必要があります、あなたは私がerror_bublingを削除するテンプレート

<div id="maxRedemptionForDiscountValue"> 
    {{ form_errors(form.maxRedemptionForDiscountValue) }} 
    {{ form_row(form.maxRedemptionForDiscountValue) }} 
</div> 
+0

[OK]を、感謝を編集する必要があります。私はあなたの解決策を試してみた私の質問に書いているように "$ form - > get( 'maxRedemptionForDiscountValue') - > addError(新しいFormError( 'エラーメッセージ'));"しかし、これは私のためには機能しません。これを使用すると、エラーはフォームの上部から削除され、特定のフィールドには表示されません。 – goldlife

+0

@goldlife両方のソリューションを試しましたか?error_bubblingが削除され、特定のフィールドにエラーが追加されましたか? – DonCallisto

+0

はい私は両方をしました。 – goldlife

関連する問題