2010-04-23 11 views
0

J'essaie de rejoindre dans la même action le formulaire de connexion et le registre. C'est ce que je suis en train:Symfony: joindre deux formulaires dans la même page

modules/miembros/actions.class.php

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

    } 

modules/MIEMBROS/templates/auxSuccess.php

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

modules/composants/MIEMBROS. 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'); 
    } 
    } 

} 

modules/miembros/templates/_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'] ?> 
... 

Cela fonctionne bien, mais je voudrais savoir si vous avez d'autres alternatives. Par exemple je n'aime pas la ligne: $ this-> getController() -> getActionStack() -> getLastEntry() -> getActionInstance() -> redirect ('@home');

Cordialement

Javi

Répondre

1

vous ne devriez pas traiter le formulaire dans votre composant, vous devriez le faire dans votre action. les composants sont censés être des vues réutilisables qui peuvent être incluses dans d'autres modèles (similaires aux partiels, mais avec du code derrière eux pour supporter des récupérations de données plus complexes). Si vous souhaitez afficher le formulaire dans un composant afin de pouvoir le réutiliser, vous pouvez le faire, mais vous devez gérer le formulaire dans une autre action.

+0

J'ai une nouvelle proposition basée sur votre commentaire. – ziiweb

1

grâce au commentaire de matei c'est ma nouvelle proposition. Quelle est votre opinion maintenant?

modules/miembros/actions/actions.class.php

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

modules/miembros/templates/_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)); 

modules/sfGuardAuth/templates/_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)); 

} 

Cela fonctionne également.

Javi

+0

il y a longtemps depuis ce post mais ireal a une question casue im travailler sur un projet avec symfony 1.4? Pourriez-vous m'expliquer comment en rendant un partiel n'inclut pas un template? –

Questions connexes