【问题标题】:How to merge default options with new options in Symfony forms如何在 Symfony 表单中将默认选项与新选项合并
【发布时间】:2016-12-12 10:38:47
【问题描述】:

我有一个表单和一个子表单,我想合并定义为默认值的约束值和根表单添加的论文。

我的子表单:

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 但似乎没有调用回调方法

谢谢,科伦丁

【问题讨论】:

    标签: php symfony symfony-forms


    【解决方案1】:

    在你的父表单类型上尝试这样的事情:

    ...
    
    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(...),
                ...
            ]);
        });
    }
    
    ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-06
      • 2019-08-25
      • 2014-12-05
      • 1970-01-01
      相关资源
      最近更新 更多