可以';不要用符号处理形式


Can't handle form with symfony

我有一个控制器,它呈现一个呈现到每个页面的表单。

问题是,表单不关心提交事件。

每个页面都扩展base.html.twig,其中是

{{ render(controller('AppBundle:NewsLetter:formRender')) }}

这是控制器:

<?php
namespace AppBundle'Controller;
use Symfony'Bundle'FrameworkBundle'Controller'Controller;
use Symfony'Component'HttpFoundation'Request;
use AppBundle'Entity'Emails;
use Symfony'Component'Form'Extension'Core'Type'EmailType;
use Symfony'Component'Form'Extension'Core'Type'SubmitType;
class NewsLetterController extends Controller
{
    public function formRenderAction(Request $request)
    {
        $email = new Emails();
        $form = $this->createFormBuilder($email)
            ->add('email', EmailType::class, array('label' => false, 'attr' => array('placeholder' => 'Your e-mail address')))
            ->add('save', SubmitType::class, array('label' => 'SUBMIT!'))
            ->getForm();
        $form->handleRequest($request);
        if ($form->isSubmitted()) {
            die(); //breakpoint
            $em = $this->getDoctrine()->getManager();
            $em->persist($email);
            $em->flush();
            $this->addFlash('success', 'Email was successfully saved.');
        }
      return $this->render('newsLetter.html.twig', array('form' => $form->createView()));
    }
}

最后是newsletter.html wig

<div class="newsletter">
  <p>Nechte si zasílat články e-mailem</p>
  {{ form_start(form) }}
    {{ form_widget(form) }}
    {{ form_end(form) }}
</div>

因此,表单被正确地呈现,但在提交之后什么都没有发生。

当你添加一个表单而没有指定操作时,它会发布回呈现它的同一个url。因此,如果你有一个出现在多个页面上的表单,每个控制器函数都必须能够处理该表单。

您可以创建一个具有该功能的基本控制器,并扩展其他控制器。如果您这样做,每个操作方法都必须调用此函数,并且您必须单独处理表单的提交,因为该页面上可能有多个表单
例如$emailAction = $form->get('addEmail')->isClicked(

或者,你可以将表单的操作设置为一个专门的路由,只处理该表单,然后可能重定向回原始url(可能将其作为隐藏字段传递,选择权在你)
E.g

$form = $this->createForm(Foo::class, $task, array(
    'action' => $this->generateUrl('target_route'),
    'method' => 'POST',
));