在一个页面中处理两种不同的形式

时间:2012-01-06 10:25:26

标签: forms symfony1

所以我想在一个页面上处理两个表单,我遇到了一些问题;我有一个名为'contact'的模块,这里是indexSucces.php

<div id="registerForm">
    <form action="<?php echo url_for('contact'); ?>" method="post" id="loginForm">                  


        <?php foreach ($loginForm as $widget): ?>                                               
            <?php if(!$widget->isHidden()) { ?>             
                    <?php echo $widget->renderRow(); ?>
             <?php } else { ?>
                <?php echo $widget->render() ?>
             <?php } ?>
        <?php endforeach; ?>       
        <br/><input type="submit" id="loginSubmit" class="btn primary" value="<?php echo __('Envoyer'); ?>" />
    </form>
</div>


<div id="registerForm">
    <form action="<?php echo url_for('contact'); ?>" method="post" id="registerForm">                  


        <?php foreach ($registerForm as $widget): ?>                                                
            <?php if(!$widget->isHidden()) { ?>             
                    <?php echo $widget->renderRow(); ?>
             <?php } else { ?>
                <?php echo $widget->render() ?>
             <?php } ?>
        <?php endforeach; ?>       
        <br/><input type="submit" id="registerSubmit" class="btn primary" value="<?php echo __('Envoyer'); ?>" />
    </form>
</div>

是否可以在单个操作页面中处理?我需要知道如何做到这一点,我从昨天开始就被卡住了。例如,当我想提交第一个表格时,它想要提交第二个表格。

有人可以提供一个例子吗?如果你想看看我是如何处理的话,我可以发布我的sh * * 操作页面。

提前致谢!

编辑:

I made this code according to your advice :

public function executeIndex(sfWebRequest $request)
{

$this->loginForm = new loginForm(); 
$this->registerForm = new registerForm();  

$this->processForm($request, $this->loginForm, $this->registerForm);



}  

public function processForm(sfWebRequest $request, sfForm $loginForm, sfForm $registerForm)
{
  if($request->hasParameter('login'))
  {
      if($request->isMethod('post'))
      {
          $loginForm->bind($request->getParameter($loginForm->getName()));
          if($loginForm->isValid())
          {
              $this->redirect('payement');
          }
      }
  } elseif ($request->hasParameter('register'))
  {
      if($request->isMethod('post'))
      {
          $registerForm->bind($request->getParameter($registerForm->getName()));
          if($registerForm->isValid())
          {
              $this->redirect('payement');
          }
      }
  }   
}

registerForm正确提交,我可以看到我在表单中所做的错误等,如果它是正确的,它被正确地重定向。但是当我提交loginForm时,这是错误:

传递给sfForm :: bind()的参数1必须是一个数组,字符串给出:在这一行

 $loginForm->bind($request->getParameter($loginForm->getName()));

为什么?

1 个答案:

答案 0 :(得分:1)

是的,你可以。

为您的按钮添加name属性(即登录和注册),并将您的操作修改为:

if ($request->hasParameter("login")) {
  // handle login
}
elseif ($request->hasParameter("register")) {
  // handle register
}