Обработка двух разных форм на одной странице - PullRequest
2 голосов
/ 06 января 2012

Итак, я хочу обработать две формы на одной странице, и у меня есть некоторые проблемы, чтобы сделать это; У меня есть модуль с именем «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, вот ошибка:

Аргумент 1, передаваемый в sfForm :: bind (), должен быть массивом, строка которого указана: в этой строке

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

Почему?

1 Ответ

1 голос
/ 06 января 2012

Да, вы можете.

Добавить атрибут name к вашим кнопкам (например, войти и зарегистрироваться) и изменить свое действие на:

if ($request->hasParameter("login")) {
  // handle login
}
elseif ($request->hasParameter("register")) {
  // handle register
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...