2013-11-27 9 views
5

コンパウンドとinherit_dataオプションがtrueに設定された埋め込みフォームがあります。Symfony2コンパウンドフォーム、フィールドにエラーを関連付ける

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder->setErrorBubbling(false); 

    $builder->add('date_start', 'date', array(
     'label'    => 'form.date_start.label', 
     'widget'   => 'single_text', 
     'required'   => false, 
     'group'    => ['event', 'dates'] 
    )); 

    $builder->add('date_end', 'date', array(
     'label'    => 'form.date_end.label', 
     'widget'   => 'single_text', 
     'required'   => false, 
     'group'    => ['event', 'dates'] 
    )); 

    $builder->add('time_zone', 'alternate_timezone', [ 
     'label'    => 'form.timezone.label', 
     'field_help'  => 'form.timezone.help', 
     'empty_value'  => 'form.timezone.empty_value', 
     'required'   => false, 
     'group'    => ['event', 'dates'] 
    ]); 
} 

/** 
* {@inheritdoc} 
*/ 
public function setDefaultOptions(OptionsResolverInterface $resolver) 
{ 
    $resolver->setDefaults([ 
     'label'  => false, 
     'compound'  => true, 
     'inherit_data' => true 
    ]); 
} 

フィールドにエラーを関連付けることはできません。このフォームのエラーは、フィールドではなく親のフォームに表示されます。私はdocで、error_bubblingはformがcompoundでない限りfalseであることがわかりました。

フィールドに関連するエラーを持つ複合フォームのソリューションは何ですか?あなたは化合物の関係で各エンティティの検証制約を定義することができますし、検証中に生成されたすべてのエラーは、エラーが発生したフォーム要素の近くに/上に表示されます -

はsymfony中の化合物の形であなたに

+0

私は継承されている私のフォームのフィールドで、この問題を持っています。検証ルーチンで継承されたフォームの名前をターゲットにすることはできません。エラーは常にルートフォームに泡立ちます。 error_bubblingや他の設定を変更することは私にとっては効果がありませんでした。 – lifo

答えて

-1

ありがとうございます。

たとえば、投稿したフォームの例が "ExampleEntity"エンティティにバインドされている場合、そのエンティティの検証制約をバンドルのvalidation.ymlに定義できます。検証エラーは、複数の子フォームで検証エラーが発生する可能性のあるコレクションであっても、それぞれの子フォームの横に表示されます。

例のsrc/MyBundle /リソース/コンフィグ/ validation.yml

App\MyBundle\Entity\ExampleEntity: 
     properties: 
      date_start: 
       - NotBlank: 
        message: Date start cannot be blank. 
      date_end: 
       - NotBlank: 
        message: Date end field cannot be blank. 
      time_zone: 
       - NotBlank: 
        message: Timezone cannot be blank. 
関連する問題