Symfony: объединение двух форм на одной странице - PullRequest
0 голосов
/ 23 апреля 2010

Я пытаюсь объединить одно и то же действие в форме входа и регистрации. Вот что я пытаюсь:

модули / 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-> getController () -> getActionStack () -> getLastEntry () -> getActionInstance () -> redirect ('@home');

Привет

1021 * Javi *

Ответы [ 2 ]

1 голос
/ 23 апреля 2010

благодаря комментарию 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));

 }

Это также работает.

1017 * Javi *

1 голос
/ 23 апреля 2010

вы не должны обрабатывать форму в своем компоненте, вы должны делать это в своем действии.Компоненты предназначены для многократного использования представлений, которые могут быть включены в другие шаблоны (аналогично частичным, но с некоторым кодом за ними для поддержки более сложного извлечения данных).Если вы хотите показать форму в компоненте, чтобы вы могли использовать ее повторно, вы можете это сделать, но вы должны обработать форму в другом действии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...