Symfony - 同一页面上两个实体的两个表单

时间:2015-12-02 17:32:40

标签: php forms symfony twig

我想在我的主页上有两个表单,来自两个实体,在同一个控制器中。

表格如下:

class DevisController extends Controller
{
    public function DevisAction(Request $request)
    {
        $devis = new Devis();
        $form = $this->createForm(new DevisType(), $devis);

        if ($form->handleRequest($request)->isValid()) {
            $em = $this->getDoctrine()->getManager();

            $em->persist($devis);
            $em->flush();
            $request
                ->getSession()
                ->getFlashBag()
                ->add('info', 'Le devis a bien été envoyé !');

            $message = \Swift_Message::newInstance();
            $imgUrl = $message->attach(\Swift_Attachment::fromPath('http://img15.hostingpics.net/pics/419370oah.png'));

            $message
                ->setSubject('Demande de devis bien reçue !')
                ->setFrom('xxx@gmail.com')
                ->setTo($devis->getEmail())
                ->setBody(
                    $this->renderView(
                        'OAHDevisBundle:Devis:devis_email.html.twig',
                        array('url' => $imgUrl)
                    ),
                    'text/html'
                );

            $this->get('mailer')->send($message); 

            $message = \Swift_Message::newInstance()
                 ->setSubject('Nouvelle demande de devis')
                 ->setFrom('xxxn@gmail.com')
                 ->setTo('xxxn@gmail.com')
                 ->setBody(
                      $this->renderView(
                           'OAHDevisBundle:Devis:devis_recu.html.twig'
                      ),
                      'text/html'
                 );

           $this->get('mailer')->send($message);

           return $this->redirect($this->generateUrl('oah_core_homepage'));
      }

      // Si on n'est pas en POST, alors on affiche le formulaire
      return $this->render('OAHCoreBundle:Core:layout.html.twig', array(
          'form' => $form->createView(),
      ));
    }

    public function NewsletterAction(Request $request)
    {
        $newsletter = new Newsletter();
        $formEmail = $this->createForm(new NewsletterType(), $newsletter);

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

            $request
               ->getSession()
               ->getFlashBag()
               ->add('info', 'Vous êtes bien inscrit à la newsletter ');

            return $this->redirect($this->generateUrl('oah_core_homepage'));
        } 

         return $this->render('OAHCoreBundle:Core:layout.html.twig', array(
            'formEmail' => $formEmail->createView(),
         ));
    }
}

第一个完美无缺,第二个我改变了变量名称,以便为树枝做出改变。 所以在我的模板中,我有第二个:

{{ form(formEmail) }}

每次我发出以下错误:

  

变量" formEmail"在...中不存在   OAHCoreBundle:核心:第384行的layout.html.twig

请问这有什么问题?

1 个答案:

答案 0 :(得分:3)

根据您当前的代码,您只需拨打self

在执行此操作时,您甚至没有触及DevisAction,这就是为什么您的树枝无法找到NewsletterAction表格。

尝试将这两个表单包含在这样的一个控制器操作中,并且应该正确呈现。

formEmail

编辑这仍然需要通过提供正确的表单验证来清理,我还没有完成,但渲染问题应该解决。