2017-06-29 12 views
2

1つのチェックボックスだけを含むjavascriptによってフォームが提出されます。しかし、空のチェックボックスは要求に応じてキーを送信しないので、symfonyはフォームが送信されたことを知らない。だから、ハッキーな解決策がないか、この種の「バグ」があります。Symfony 3.3チェックボックスのみフォームが提出されていません

形態:

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

答えて

1
コントローラの

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

私はついにこの問題を解決しました。あなたのビューで

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のボタンのクリックをシミュレートすることです。

関連する問題