Symfony:在同一页面中连接两个表单

时间:2010-04-23 12:39:21

标签: forms symfony1

我正在尝试加入登录和注册表单的相同操作。这就是我正在尝试的:

模块/ miembros /的actions.class.php

  public function executeAux(sfWebRequest $request)
  {
        // I execute this action

  }

模块/ miembros /模板/ auxSuccess.php

<?php include_component('sfGuardRegister', 'register'); ?>
<?php include_component('sfGuardAuth', 'signin'); ?>

模块/ miembros / components.class.php

public function executeSignin($request)
{

  if ( $request->isMethod( 'post' ) && ($request-
>getParameter('submit')=='signin') ){

    $this->form->bind( $request->getParameter( 'login' ) );
    if ( $this->form->isValid() ){
      $this->getController()->getActionStack()->getLastEntry()->getActionInstance()->redirect( '@home' );
    }
  }

}

模块/ miembros /模板/ _signin.php

<form action="<?php echo url_for('miembros/aux?submit=signin') ?>"
method="post">

        <?php echo $form['email_address']->renderLabel() ?>
        <?php echo $form['email_address'] ?>
... 

它工作正常,但我想知道你是否有其他选择。

例如我不喜欢这条线:     $ this-&gt; getController() - &gt; getActionStack() - &gt; getLastEntry() - &gt; getActionInstance() - &gt; redirect('@ home');

此致

哈维

2 个答案:

答案 0 :(得分:1)

您不应该在组件中处理表单,您应该在操作中执行此操作。组件意味着可以包含在其他模板中的可重用视图(类似于部分模板,但其背后有一些代码可以支持更复杂的数据检索)。如果要在组件中显示表单以便可以重用它,则可以,但是您应该在另一个操作中处理该表单。

答案 1 :(得分:1)

感谢matei的评论这是我的新建议。你现在有什么看法?

模块/ miembros /动作/的actions.class.php

public function executeAux(sfWebRequest $request)
{
    return $this->renderPartial('aux');
}

模块/ miembros /模板/ _aux.php

if(!isset($form_register)){

    $form_register = new sfGuardFormRegisterByOthers();
} 

include_partial('sfGuardRegister/register', array('form' => $form_register));


if(!isset($form_signin)){

    $form_signin = new sfGuardFormSigninByEmail();
}

include_partial('sfGuardAuth/signin', array('form' => $form_signin));

模块/ sfGuardAuth /模板/ _signin

<form action="<?php echo url_for('sfGuardAuth/signin') ?>" method="post">

modules / miembros / sfGuardAuth / actions.class.php

 if ($this->form->isValid())
 {
   //...

 }else{

    return $this->renderPartial('miembros/aux', array('form_signin' => $this->form));

 }

它也有效。

哈维