如何在请求中告知每个表单?

时间:2014-11-25 10:36:19

标签: symfony

我在symfony2中有关于formbuilder的简单问题

我正在制作一页中有两个表格的页面。

    $form1 = $this->createFormBuilder()
    ->add('date1')
    ->add('save', 'submit', array('label' => 'date1 INPUT!'))
    ->getForm();


    $form2 = $this->createFormBuilder()
    ->add('date2')
    ->add('save', 'submit', array('label' => 'date2 INPUT!'))
    ->getForm();

    return $this->render('AcmeMemberBundle:Default:formExample.html.twig',
            array('form' => $form->createView(),'form2' => $form2->createView()));
然后开始上课

public function receiveAction(Request $request){
    $receiveForm = $this->createFormBuilder($myClass)
        $receiveForm->handleRequest($request);
            if ($receiveForm->isValid()) {
        //how can I tell this $request data is form1 or form2???
     }
}

我正在使用sumfony 2.3.19

请给我一些好主意!!


感谢您的回复, 我认为我的第一个问题并不好。 我重新编写代码。 form1具有coorspondant类的形式。 form2没有coorspondant类。

public function tPortalAction(Request $request){

    $scheTeacher = new ScheTeacher();
    $form1 = $this->createFormBuilder($scheTeacher)
    ->add('date1')     
    ->add('save1','submit', array('label'=>'date1 INPUT!')) 
    ->getForm();    

    $form2 = $this->createFormBuilder()     
    ->add('date2')
    ->add('save2','submit', array('label'=>'date2 INPUT!'))     -
    ->getForm();

    $form3 = $this->createFormBuilder()->getForm();
    $form3->handleRequest($request);
    if ($form3->isValid()) {
        if ($form3->get('save1')->isClicked()) {
            // form 1
            echo("form1 clicked!");break;
        } elseif ($form3->get('save2')->isClicked()) {
            // form 2
            echo("form2 clicked!");break;
        }    
    }
}

使用此代码 没有任何反应。

1 个答案:

答案 0 :(得分:2)

假设用户只点击一个表单的提交,您可以查看点击的内容 (这仅适用于Symfony> = 2.3

将表单更改为类似的内容;

$form1 = $this->createFormBuilder()
    ->add('date1')
    ->add('save1', 'submit', array('label' => 'date1 INPUT!'))
    ->getForm();


    $form2 = $this->createFormBuilder()
    ->add('date2')
    ->add('save2', 'submit', array('label' => 'date2 INPUT!'))
    ->getForm();

然后在检查时尝试:

if ($form->get('save1')->isClicked()) {
   // form 1
} elseif ($form->get('save2')->isClicked()) {
   // form 2
}

根据问题更新进行编辑:

这是未经测试的,但应该有效;

public function tPortalAction(Request $request){

    $scheTeacher = new ScheTeacher();
    $form1 = $this->get('form.factory')->createNamedBuilder('myform1', 'form',  $scheTeacher, array())
        ->add('date1')
        ->getForm();

    $form2 = $this->get('form.factory')->createNamedBuilder('myform2', 'form',  null, array())
        ->add('date1')
        ->getForm();

    if('POST' === $request->getMethod()) {
        if ($request->request->has('myform1') {
            // handle the first form
        }

        if ($request->request->has('myform2') {
            // handle the second form
        }

        // etc
    }
}