Группы проверки на поле сбора - PullRequest
0 голосов
/ 04 марта 2019

Привет, у меня такая проблема с типом коллекции

->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: «Решение» У меня была также задана опция datamapper для формы, и я обнаружил, что данные сопоставляются с объектом до проверки, и это было проблемой.Я получил исключение из своего объекта, поэтому предположил, что проверка не работает.

1 Ответ

0 голосов
/ 05 марта 2019

Во-первых, убедитесь, что ваш запрос POST или PUT

Вместо этого

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

Сделайте это:

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

А затем вынудите форму обрабатывать запрос и затем применить валидатор

$form->handleRequest($request);

Теперь проверка должнасработать.

...