2016-12-12 3 views
1

私はフォームとサブフォームを持っています。私は、デフォルトとして定義された制約値とルートフォームによって追加されたこれらの値をマージしたいと思います。symfonyフォームのデフォルトオプションと新しいオプションをマージする方法

マイサブフォーム:

class DatesPeriodType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('start', DateType::class, [ 
       'constraints' => [ 
        new Date(), 
       ] 
      ]) 
      ->add('end', DateType::class, [ 
       'constraints' => [ 
        new Date(), 
       ] 
      ]) 
     ; 
    } 

    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver 
      ->setDefault('error_bubbling', false) 
      ->setDefault('constraints', [ 
       new Callback([$this, 'validate']), 
      ]) 
     ; 
    } 

} 

私は新しい制約オプションを使用してルートに私のフォームを追加します。予想通り

 $builder 
      ->add('judgmentPeriod', DatesPeriodType::class, [ 
       'constraints' => [ 
        new Valid(), 
        new Callback([ 
         'callback' => [$this, 'datesAreEmpty'], 
         'groups' => ['insertionPeriod'], 
        ]), 
        new Callback([ 
         'callback' => [$this, 'validDates'], 
         'groups' => ['judgmentPeriod'], 
        ]), 
       ] 
      ]) 

、制約のオプションは、現在3つの要素が含まれているとコールバックの制約がマージされていません。 私は、このソリューションを試してみました:Default Options for symfony 2 forms are being overridden not mergedが、コールバックメソッドが

おかげで呼ばれるように思わないで、Corentin

答えて

0

があなたの親フォームタイプでこのような何かを試してみてください:

... 

public function configureOptions(OptionsResolver $resolver) 
{ 
    $resolver->setNormalizer('constraints', function (Options $options, $value) { 
     // Merge the child constraints with the these, the parent constraints 
     return array_merge($value, [ 
      new Assert\Callback(...), 
      ... 
     ]); 
    }); 
} 

... 
関連する問題