2015-12-02 95 views
0

我想在我的主頁上有兩種形式,來自兩個實體,在同一個控制器中。Symfony - 兩個實體在同一頁面上的兩種形式

的形式有以下幾種:

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('[email protected]') 
       ->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('[email protected]') 
       ->setTo('[email protected]') 
       ->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存在的layout.html在線384

請問這有什麼問題嗎?

+0

你用'formEmail'渲染'OAHCoreBundle:Core:layout.html.twig'嗎?你是指'通訊行動'嗎? – Federkun

+0

我編輯顯示我的整個控制器 – Flushdrew

+0

我認爲你應該在同一個方法中創建兩個表單。您當前的代碼顯示您只運行一種表單。 –

回答

3

根據你目前的代碼,你只能打電話給你的DevisAction

雖然這樣做,你甚至沒有觸及NewsletterAction,這就是爲什麼你的樹枝找不到formEmail表格。

嘗試在一個控制器動作中包含這兩個表單,並且它應該正確呈現。

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

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

     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('[email protected]') 
       ->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('[email protected]') 
       ->setTo('[email protected]') 
       ->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(), 
      'formEmail' => $formEmail->createView() 
     )); 
    } 
} 

編輯這仍然需要通過提供我沒有做過,但呈現的問題應該得到解決相應的表單驗證清洗。

+0

謝謝你完美的作品! – Flushdrew

+0

很高興我能幫到你 –