Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
Ayant déja lu et relu la documentation, cherché et recherché je n'arrive pas à comprendre le comportement du framework.
Donc j'ai un layout qui s'affiche correctement et je veux faire des opération distinctes sur un formulaire d'authentification dans une zone et un formulaire d'inscription dans ma zone principale de contenu.
Voici mon layout :
<?php echo $this->doctype(); ?> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <?php echo $this->headTitle(); ?> <meta name="description" content="description content" /> <meta name="keywords" content="keywords" /> <meta name="author" content="author" /> <meta charset="UTF-8" /> <!--[if IE]> <script src="/scripts/html5-ie.js"></script> <link href="/css/themes/colorpaper/ie.css" media="screen" rel="stylesheet" type="text/css" /> <![endif]--> <?php echo $this->headLink()->appendStylesheet('/css/themes/colorpaper/style.css') ->appendStylesheet('/css/themes/colorpaper/reset-min.css');?> </head> <body> <div id="bgRepeatBottom"> <div id="bgTop"> <div id="bgBottom"> <div id="content"> <header> <nav> <a href="<?php echo $this->url(array('controller'=>'index'),'default',true) ?>" title="Accueil" >Accueil</a> <a href="<?php echo $this->url(array('controller'=>'concept'),'default',true) ?>" title="Concept du site" >Concept du site</a> <a href="<?php echo $this->url(array('controller'=>'rss'),'default',true) ?>" title="RSS" >RSS</a> <a href="<?php echo $this->url(array('controller'=>'contact'),'default',true) ?>" title="Contact">Contact</a> </nav> </header> <div id="brdTopContent"></div> <div id="page"> <div id="leftContent"> <section id="searchengine"> <h1><?php echo $this->escape($this->title); ?></h1> <?php echo $this->layout()->content;?> </section> <div id="backgroundBottomLeftContent"></div> <section id="news"> </section> </div> <div id="rightContent"> <section id="log"> <h1> Authentification </h1> <?php echo $this->action('log','login'); ?> </section> <section id="statistics"> </section> <section id="ranking"> </section> </div> <div class="spacer"></div> </div> <footer> <nav> </nav> </footer> </div> </div> </div> </div> </body> </html>
Voici mon controller Login
<?php class LoginController extends Zend_Controller_Action { public function init() { } public function indexAction() { } public function logAction() { $formLogin = new Form_Login(); $this->view->loginForm = $formLogin; $this->render('log'); if($this->getRequest()->isPost()){ $formDataLogin = $this->getRequest()->getPost(); if ($formLogin->isValid($formDataLogin)) { Zend_Debug::dump('ici'); }else{ $formLogin->populate($formDataLogin); } } } }
voici la vue login.phtml
<?php echo $this->loginForm; ?> voici le form login.php associé Code : <?php class Form_Login extends Zend_Form { public function __construct($options = null) { parent::__construct($options); $this->setName('login'); $this->setAction('/login/log'); $email = new Zend_Form_Element_Text("emailLog",array('size' => 25)); $email ->setLabel('E-mail *') ->setRequired(true) ->addFilter('StringTrim') ->addFilter('StripTags') ->addValidator('NotEmpty', true , array('messages' => array('isEmpty' => 'Vide'))) ->addValidator('EmailAddress'); $email->addDecorator(new My_Form_Decorator_Html(array('html' => "<div class='spacer'></div>",'placement' => 'append'))); $password = new Zend_Form_Element_Password("passwordLog", array('size' => 25)); $password ->setLabel('Mot de passe *') ->setRequired(true) ->addFilter('StringTrim') ->addValidator('NotEmpty', true , array('messages' => array('isEmpty' => 'Vide'))); $password->addDecorator(new My_Form_Decorator_Html(array('html' => "<div class='spacer'></div>",'placement' => 'append'))); $valider = new Zend_Form_Element_Submit('valider'); $valider->addDecorator(new My_Form_Decorator_Html(array('html' => "<a title='Inscription' href='/users/ajouter' id='inscription-link'>Inscription</a>",'placement' => 'append'))); $valider->setAttrib('id', 'boutonValider') ->removeDecorator('DtDdWrapper'); $this->addElements(array($email,$password,$valider)); } }
Donc mon formulaire d'authentification s'affiche correctement en haut à droite dans mon layout dans la <section id="log"> .
Par contre quand je valide ce formulaire d'authentification :
-Le formulaire vide s'affiche dans la section <section id="searchengine"> à la place du $this->layout()->content; au lieu de rester dans la section dans laquelle j'ai mon formulaire <section id="log"> ?
Voilà je ne comprends pas pourquoi le framework agit comme ça ?
Il doit y avoir quelque chose qui m'échappe ...
En vous remerçiant.
Dernière modification par psylo66 (06-10-2010 01:21:16)
Hors ligne
Salut,
Si je comprends bien :
* Au départ, lors de l'affichage initial de la page, le formulaire s'affiche à la place prévue.
* Mais, une fois le formulaire envoyé, il ne s'affiche plus.
C'est ça?
A+
Hors ligne
Oui j'étais un peu fatigué et je n'avais pas bien compris qu'en spécifiant une action à mon formulaire celle-ci allé forcément changer mon contenu de page.
Pour distinguer mes 2 formulaires sur la même page j'ai utilisé un input type hidden pour les différencier dans chaque form et j'ai laissé mon action vide pour chaque form :
//Exemple form login
$idForm = new Zend_Form_Element_Hidden('form'); $idForm->removeDecorator('HtmlTag') ->removeDecorator('label') ->setAttrib('id', 'formLog') ->setValue('formLog');
Ensuite je m'en occupe dans mon traitement lors de l'envoi
//controller login
public function log() { $formLogin = new Form_Login(); $this->view->login = $formLogin; if($this->getRequest()->isPost()){ $formDataLogin = $this->getRequest()->getPost(); if(isset($formDataLogin['form']) && $formDataLogin['form']==='formLog'){ if ($formLogin->isValid($formDataLogin)){ if($this->_process($formLogin->getValues())){ $users = new Model_DbTable_Users(); if($users->obtenirStatutUser($formDataLogin['emailLog'])==1){ $logged = $this->loggedInAs(); $this->view->login = $logged; }else{ //a améliorer (l'afficher déja caché dans le frm) $passwordElement = $formLogin->getElement('passwordLog'); $passwordElement->addDecorator(new My_Form_Decorator_Html(array('html' => "<div class='spacer'></div><div class='errorLog'>Votre compte est inactif (lien vue explication)</div>",'placement' => 'append'))); } }else{ //a améliorer (l'afficher déja caché dans le frm) $passwordElement = $formLogin->getElement('passwordLog'); $passwordElement->addDecorator(new My_Form_Decorator_Html(array('html' => "<div class='spacer'></div><div class='errorLog'>Email ou mot de passe incorrecte</div>",'placement' => 'append'))); } } } } }
Hors ligne
Pages: 1