我希望主页上有两个表单,来自同一控制器中的两个实体。
表格如下:
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(),
));
}
}
第一个非常有效,第二个我更改了变量名以使trick有所不同。所以在我的模板中,我有第二个:
{{ form(formEmail) }}
每次我都会出现以下错误:
中不存在变量"formEmail"OAHCoreBundle:核心:在384 线上的layout.html.twig
请问这个怎么了?
根据您当前的代码,您只调用您的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('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(),
'formEmail' => $formEmail->createView()
));
}
}
EDIT这仍然需要通过提供正确的表单验证来清理,我还没有这样做,但渲染问题应该得到解决。