Условно проверяющие поля в формах Symfony - PullRequest
0 голосов
/ 04 сентября 2018

В моей (symfony 3.4) форме я хочу проверить поле в зависимости от того, установлен ли флажок в той же форме. Я пытался использовать группы проверки, но поле никогда не проверялось.

Это тип формы, который я использую:

class DummyType extends AbstractType
{

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('createAccount', CheckboxType::class)
            ->add('password', PasswordType::class, [
                'constraints' => [new NotBlank()],
                'validation_groups' => ['password']
            ])
            ->add('submit', SubmitType::class)
        ;
    }

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

                if ($data['createAccount'] === true) {
                    return ['Default', 'password'];
                }

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

А вот действие по созданию формы:

/**
 * @Route("/debug/form")
 * @param Request $request
 *
 * @return \Symfony\Component\HttpFoundation\Response
 */
public function formAction(Request $request)
{
    $form = $this->createForm(DummyType::class, null, ['action' => '/debug/form']);

    $form->handleRequest($request);

    $message = '';
    if ($form->isSubmitted() && $form->isValid()) {
        $message = 'Form submitted successfully';
    }

    return $this->render('@App/Debug/debug.html.twig', ['form' => $form->createView(), 'message' => $message]);
}

Установка флажка ничего не меняет. Форма всегда будет подтверждена. Я предполагал, что указание таких групп проверки приведет к удалению поля password из групп по умолчанию (что, по-видимому, имеет место, поскольку проверка для этого поля полностью завершена) и добавление его only к password группа. Это не тот случай, или есть какой-либо другой способ проверки поля password, если флажок установлен?

...