如何将默认选项与Symfony表单中的新选项合并



我有一个表单和一个子形式,我想合并定义为默认值的约束值,而这些约束值由root表单添加。

我的子形式:

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个元素,并且不合并回调约束。我尝试了此解决方案:Symfony 2表格的默认选项不被覆盖,而是合并的,但似乎未称为

谢谢,科伦丁

在您的父级表单上尝试这样的事情:

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

相关内容

最新更新