如何为两种形式保留数据

时间:2013-06-06 15:43:22

标签: php symfony

我有一个包含两个表单的页面,每个表单都是通过单击一个选项卡显示的,每个表单都有一个“添加”按钮,问题是当我点击添加第一个或第二个表单时我可以' t将数据保存在数据库中。 谢谢您的帮助 以下是两种形式的持续行动: Controller.php这样

public function ajouterPSAction()
  {  
     $affairePS = new AffairePanneauSolaire;
     $affairePC = new AffairePompeChaleur;
     $form1 = $this->createForm(new AffairePanneauSolaireType(), $affairePS);
     $form = $this->createForm(new AffairePanneauSolaireType(), $affairePC);
     $req = $this->get('request');

    if( $req->getMethod() === 'POST' )
    {       

            $form1->bind($req);
            if ($form1->isValid()) {
              $em = $this->getDoctrine()
                          ->getManager();

              $em->persist($affairePS); 
              $em->flush();
              // On définit un message flash
              $this->get('session')->getFlashBag()->add('info', 'Affaire bien ajouté');     
      // Puis on redirige vers la page de visualisation :
      return $this->redirect( $this->generateUrl('affaire_voir_affairePS', array(
                                                                                 'id' => $affairePS->getId()
            )) ); }
  }
  // Si on n'est pas en POST, alors on affiche le formulaire
    return $this->render('AffaireBundle:Affaires:ajouter.html.twig', array('form' => $form->createView(),'form1' => $form1->createView()));
  }
public function ajouterPCAction()
  { 
     $affairePC = new AffairePompeChaleur;
     $affairePS =  new AffairePanneauSolaire;
     $form = $this->createForm(new AffairePompeChaleurType(), $affairePC);
     $form1 = $this->createForm(new AffairePanneauSolaireType(), $affairePS);
     $req = $this->get('request');
     if( $req->getMethod() === 'POST' )
    {       
       $form->bind($req);
       if ($form->isValid()) {
       $em = $this->getDoctrine()
                   ->getManager();
       $em->persist($affairePC);
       $em->flush();
          // On définit un message flash
              $this->get('session')->getFlashBag()->add('info', 'Affaire bien ajouté');     
      // Puis on redirige vers la page de visualisation :
      return $this->redirect( $this->generateUrl('affaire_voir_affairePC', array(
                                                                                 'id' => $affairePC->getId()
            )) ); }
  }
  // Si on n'est pas en POST, alors on affiche le formulaire
  return $this->render('AffaireBundle:Affaires:ajouter.html.twig', array('form' => $form->createView(),'form1' => $form1->createView()));
  }

对于两个动作ajouterPSAction和ajouterPCaction,我让他们原样?或者我必须花费新表格的每一个动作? 将拖曳表格显示为2个标签,我就这样吗?

 <div class="tabbable">
                            <ul id="myTab" class="nav nav-tabs" style="width: 1270px;">
                                <li><a href="#home" data-toggle="tab">Pompe à chaleur</a></li>
                                <li><a href="#profile" data-toggle="tab">Panneaux solaires</a></li>


                            </ul>
                            <div class="tab-content" style="float: left;">
                                <div class="tab-pane fade in active" id="home">{% include "AffaireBundle:Affaires:formulairePC.html.twig" %} </div>
                                <div class="tab-pane fade in " id="profile"> {% include "AffaireBundle:Affaires:formulairePS.html.twig" %}</div>

                             </div>
                        </div>

1 个答案:

答案 0 :(得分:0)

我认为您应该尝试将其设为一个表单,但显示在2个标签中:

  • 创建一个新实体,其中包含2个字段$affairePSAffairePanneauSolaire)和$affairePCAffairePompeChaleur
  • 为这两个字段实施getter和setter
  • 使用新创建的表单
  • 创建一个新的表单类data_class
  • 在1 <form>内呈现新表单,但显示为2个标签,两个标签都有提交按钮

表单类代码:

class BarType extends AbstractType
{

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('affairePS', new AffairePanneauSolaireType())
            ->add('affairePC', new AffairePompeChaleurType())
        ;
    }

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(
            array(
                'data_class' => 'Path\To\New\Entity',
            )
        );
    }

    public function getName()
    {
        return 'foo_bar_type';
    }
}

行动代码:

public function fooAction()
{
    $newFormEntity = new \Path\To\New\Entity();
    $newFormEntity->setAffairePS(new AffairePanneauSolaire());
    $newFormEntity->setAffairePC(new AffairePompeChaleur());
    $form = $this->createForm(new BarType(), $newFormEntity);
}