Symfony 3.3.

I want to have a javascript submitted form that only contains one checkbox. But since empty checkboxes do not send their key to the request, Symfony is unaware of the submitted form. So, is there any bad solution or is it a "mistake".

:

class NewsletterType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('subscribingNewsletter', CheckboxType::class, [
                'label' => 'form.label.newsletter',
                'required' => false,
            ]);
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => User::class,
         ]);
    }
}

      

the controller part:

$newsletterForm = $this->formFactory->create(NewsletterType::class, $userToEdit);
$newsletterForm->handleRequest($request);

if ($this->newsletterFormHandler->handle($newsletterForm)) {
    $this->session->getFlashBag()->add('notice', 'flash_message.newsletter_changed');

   return $response;
}

      

handler:

public function handle(FormInterface $form): bool
{
    if (!$form->isSubmitted() || !$form->isValid()) {
        return false;
    }

    $this->userManager->update($form->getData());

    return true;
}

      

View:

{{ form_start(NewsletterForm) }}

{{ form_row(NewsletterForm.subscribingNewsletter, {
    attr: {class: 'js-newsletter-toggle'}
}) }}

{{ form_end(NewsletterForm) }}

      

+3


source to share


1 answer


So I finally solved this problem. The only way I have found this is to add a submit button to my code like this:

class NewsletterType extends AbstractType
{
     public function buildForm(FormBuilderInterface $builder, array $options)
     {
         $builder
             ->add('subscribingNewsletter', CheckboxType::class, [
                 'label' => 'form.label.newsletter',
                 'required' => false,
             ])
             ->add('submit', SubmitType::class);
     }

     public function configureOptions(OptionsResolver $resolver)
     {
         $resolver->setDefaults([
             'data_class' => User::class,
          ]);
     }
}

      



Not in your opinion. I was submitting a form with javascript, so the way to go about this is to simulate a button click in js.

+1


source







All Articles