Форма Symfony 3.3 только для флажка не отправлена

Я хочу, чтобы форма, отправленная javascript, содержала только один флажок. Но поскольку пустые флажки не отправляют свой ключ в запросе, Symfony не знает об отправке формы. Так есть ли какое-то не такое хакерское решение или это своего рода «ошибка».

форма:

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

часть контроллера:

$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;
}

обработчик:

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

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

    return true;
}

Посмотреть:

{{ form_start(NewsletterForm) }}

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

{{ form_end(NewsletterForm) }}

person J.Starychfojtu    schedule 29.06.2017    source источник


Ответы (1)


Итак, я, наконец, решил эту проблему. Единственный способ заставить это работать — добавить кнопку отправки в код следующим образом:

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

Не на ваш взгляд. Я отправлял форму с помощью javascript, поэтому путь к этому - имитировать нажатие кнопки в js.

person J.Starychfojtu    schedule 13.07.2017