Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour
J'ai un problème lorsque je redirige la page. si une personne se trompe ou n'entre pas de login.
Si on se connecte tout marche mais s'il y a une erreur je fais des test et je fais un redirect mais cela me retourne sur mon index sans le message d'erreur quelqu'un peut il m'aider svp .
Voici mon loginAction
public function loginAction() { $this->view->message = ''; if (!$this->_request->isPost() || !$this->_request->getPost('login') ||!$this->_request->getPost('password')) { $this->view->message = 'veuillez entrer un login ou mot de passe'; } else { // creation de l'authentificateur $db = Zend_Db_Table_Abstract::getDefaultAdapter(); $dbAdapter = new Zend_Auth_Adapter_DbTable($db, 'user', 'email', 'password', 'MD5(?)'); // passage des parametres a l'authentificateur $dbAdapter->setCredential($this->_request->getPost('password')) ->setIdentity($this->_request->getPost('login')); // authentification $result = $this->_auth->authenticate($dbAdapter); // ecriture de l'objet complet en session, sauf le champ password, // si l'identification est OK if ($result->isValid()) { $this->_auth->getStorage()->write($res = $dbAdapter->getResultRowObject(null, 'password')); $this->_redirect('/'); } else { $this->view->message = 'Login ou mot de passe incorrect'; } } $this->_helper->redirector('index', 'index'); }
et mon loginform
<form method="post" action="<?php echo $this->baseUrl();?>/login/login"> <?php if(!empty($this->message)) :?> <div id="message"> <?php echo $this->escape($this->message);?> </div> <?php endif; ?> <label for='login' >e-mail: </label> <input type='text' name='login' id="login" size='5'><br /> <label for='password' >mot de passe:</label> <input type='password' name='password' id="password" size='5'> <input type='submit' name='submit' value='Valider' /> </form>
Dernière modification par iop974 (13-03-2009 08:30:46)
Hors ligne
lorsque tu fais un redirect la vue n'est pas rendue tout ce que tu as alors mis dans view est perdu
j'utilise un modèle de prog où les redirect sont frequent. je me suis donc fixée comme règle d'ingénierie de ne pas faire 50 chose à la fois.
un action ne fait qu'un traitement atomique.
une action ne peux faire un rendu et une redirection.
j'ai donc des action qui font un redirect et qui donc ne font pas de rendu et n'utilise pas la vue.
et d'autre qui ont un rendu et pas de redirection.
pour ton cas cela ce traduit ainsi
public function showLoginAction() { // cette methode affiche le formulaire de login mais ne le traite pas } public function loginAction() { //cette action traite le login mais n'affiche rien $redirect = 'showLogin'; if (loginIsOk()) { $redirect = '/'; } else { $redirect = 'showLogin'; } $this->_redirect($redirect); }
voilà pour le principe. reste le pb des messages. pour cela j'utilise la session
dans l'action login je mets mes messages en session dans un name space "messenger".
l'action showLogin récupère les messages s'il y en a et vide le namespace
en fait je mets en place le principe du messenger dans toutes mes action qui font un rendu
ainsi j'ai un comportement homogène et toute action de type redirect peut placer un message dans le messager sans se préoccuper de savoir qui va le consommer.
tu peux lire ça http://sekaijin.ovh.org/?p=29
j'y explique le principe
A+JYT
Hors ligne
ok merci beaucoup pour l'info !
Suis aller du coté de la doc et suis tombé sur le flashmessenger et j'ai essayé d'appliquer ce que tu m'as dis et cela marche.
A la place de
$this->view->message = 'veuillez entrer un login ou mot de passe';
J'ai mis
$this->_flashMessenger->addMessage('mon message');
bien sur comme écris dans la doc faut l'initialiser avant :
$this->_flashMessenger = $this->_helper->getHelper('FlashMessenger');
Puis pour adapter ce que tu m'as dis j'ai mis ça dans mon indexAction :
public function indexAction() { $auth=Zend_Auth::getInstance(); if ($this->_auth->hasIdentity()) { $this->view->login = $this->_auth->getIdentity()->firstname; $this->render('connecter'); } else { $this->view->message = $this->_flashMessenger->getMessages(); $this->render('loginform'); } }
Du coup dans mon loginAction, je fais $this->_redirect('/'); et c'est quand il passe dans l'index qu'il affiche le message si mauvaise connexion ou bienvenue si bonne connexion
Je ne sais pas si comme je fais est bien mais ça marche. Vos avis sont les bienvenues
Merci
Hors ligne
Pages: 1