Symfony 2.3订阅表单

3

我将使用Symfony 2.3开发一个订阅邮件的表单。该表单已在其自己的模板(newsletter.html.twig)中完美运行。

我的控制器操作:

public function newsletterAction(Request $request)
{
    $newsletter = new Newsletter();

    $form = $this->createFormBuilder($newsletter)
        ->add('email', 'email')
        ->add('submit', 'submit')
        ->getForm();

    $form->handleRequest($request);

    if ($form->isValid()) {
        $em = $this->getDoctrine()->getManager();
        $em->persist($newsletter);
        $em->flush();

        $request->getSession()->getFlashBag()->add('notice', 'Vous venez de    vous enregistré à la Newsletter d\'Emoovio.');
    }
    return $this->render('MyBundle:Global:newsletter.html.twig', array(
        'form' => $form->createView(),
    ));
}

我的模板在哪里可以使用(newsletter.html.twig):

{{ form(form) }}

我的模板在哪里无法工作(index.html.twig):

////
{% render (controller("EmooviofrontBundle:Global:newsletter")) %}
////

表单已显示,但无法正常工作。可能是缺少某些内容。是否有人遇到了相同的问题并能够解释一下。谢谢。
1个回答

0

我认为当您提交表单时,POST数据会到达indexAction。该操作不会验证您的表单并呈现普通页面。在呈现过程中,它将调用Global:newsletterAction,但仅作为GET方法中没有表单数据的子请求。

您可以尝试将操作应用于表单数据

    $form = $this->createFormBuilder($newsletter, array(
        'action' => $this->generateUrl('global_newsletter'),
        'method' => 'POST',
    ))
   ->add('email', 'email')
   ->add('submit', 'submit')
   ->getForm();

谢谢您的启示。它从页面 index.html.twig 中运行,但是会重定向到 newsletter.html.twig。我需要留在 index.html.twig 中。我正在寻找解决方案。 - Vincent Moulene
我刚刚使用了以下代码:"return $this->redirect($this->generateUrl('targeturl_index'));",在"$form->isValid()"结束后回到主页。它运行良好。 - Vincent Moulene
1
是的,那是一个解决方案。另一个选择是使用AJAX提交您的表单。 - Frank B

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接