【问题标题】:Validation groups on collection field集合字段上的验证组
【发布时间】:2019-03-04 11:35:37
【问题描述】:

您好,我对集合类型有这样的问题

->add('attributes', CollectionType::class, [
    'entry_type' => CriteriaForm::class,
    'allow_add' => true,
    'required' => false,
    'constraints' => [
        new Valid(),
    ],
])

CriteriaForm 看起来像这样

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('from', TextType::class, [
            'required' => false,
            'constraints' => [
                new Date([
                    'groups' => [
                        'date_type'
                    ]
                ]),
                new Type([
                    'type' => 'integer',
                    'groups' => [
                        'number_type'
                    ],
                ])
            ]
        ])
        ->add('to', TextType::class, [
            'required' => false,
            'constraints' => [
                new Date([
                    'groups' => [
                        'date_type'
                    ]
                ]),
                new Type([
                    'type' => 'integer',
                    'groups' => [
                        'number_type'
                    ],
                ])
            ]
        ])
        ->add('formType', TextType::class, [
            'constraints' => [
                new NotNull(),
                new NotBlank(),
            ]
        ])
}

public function configureOptions(OptionsResolver $resolver)
{
    $resolver
        ->setDefaults([
            'validation_groups' => function (FormInterface $form) {
                $data = $form->getData();

                if ($data['formType'] === 'date') {
                    return ['Default', 'date_type'];
                }

                return ['Default', 'number_type'];
            },
        ]);
}

validation_groups 回调永远不会执行

编辑:

控制器

$form = $this->formFactory->create(SearchCriteriaForm::class);
$form->submit(json_decode($request->getContent(), true));

if (!$form->isValid()) {
    return new JsonResponse(null, Response::HTTP_BAD_REQUEST);
}

return new JsonResponse();

编辑 2:“解决方案” 我还将数据映射器选项设置为表单,我发现数据在验证之前已映射到对象,这就是问题所在。我的对象出现异常,所以我认为验证不起作用。

【问题讨论】:

  • 你能告诉我你的控制器吗?

标签: php symfony symfony-forms symfony4


【解决方案1】:

首先,确保你的请求是 POST 或 PUT

而不是这样做

$form->submit(json_decode($request->getContent(), true));

这样做:

$request->request->replace(json_decode($$request->getContent(), true));

然后强制表单处理请求,然后应用验证器

$form->handleRequest($request);

现在应该触发验证。

【讨论】:

    猜你喜欢
    • 2015-11-17
    • 2018-09-10
    • 2013-10-18
    • 1970-01-01
    • 1970-01-01
    • 2011-05-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-25
    相关资源
    最近更新 更多