Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
J'ai un petit problème, je suis en cour d'apprentissage du ZF et je suis bloqué par un probleme:
Voici mon layout, dans la colonne gauche, l'action 'gauche' de mon controller auth est appellée pour vérifier l'authentification de l'utilisateur. Cela marche bien mais les messages d'erreurs renvoyés à la saisie du formulaire (genre "* 'seb' is less than 6 characters long") ne s'affichent plus depuis que j'ai mis en place ce layout.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <title><?php echo $this->escape($this->title); ?></title> <link rel="stylesheet" type="text/css" media="screen" href="<?php echo $this->baseUrl;?>/html/styles/site.css" /> </head> <body> <table border='1' cellpadding="0" cellspacing="0" width="100%" height="100%"> <tr> <td colspan="3" align="center"><?php echo $this->layout()->header ?></td> </tr> <tr> <td width="20%"><?php echo $this->action('gauche','auth') ?></td> <h1><?php echo $this->escape($this->title); ?></h1> <td><?php echo $this->layout()->content?></td> <td width="20%"><?php echo $this->layout()->droite?></td> </tr> <tr> <td colspan="3" align="center"><?php echo $this->layout()->footer ?></td> </tr> </table> </html>
La seule façon pour que cela marche est de mettre un $this->render('auth'); en fin de loginAction, et la le probleme est que le rendu se fait au milieu de la page (dans le content du layout)
Sauriez vous comment faire en sorte que tous les affichages se fassent dans la partie gauche, je me mélange les pinceaux la
<?php class AuthController extends Zend_Controller_Action { function init () { $this->initView(); $this->view->baseUrl = $this->_request->getBaseUrl(); } public function getForm () { $form = new Zend_Form(); $form->setAction('') ->setMethod('post'); // Create and configure username element: $username = $form->createElement('text', 'username'); $username->addValidator('alnum') ->addValidator('regex', false, array('/^[a-z]+/')) ->addValidator('stringLength', false, array(6, 20)) ->setRequired(true) ->addFilter('StringToLower'); // Create and configure password element: $password = $form->createElement('password', 'password'); $password->addValidator('StringLength', false, array(6)) ->setRequired(true); // Add elements to form: $form->addElement($username) ->addElement($password) // use addElement() as a factory to create 'Login' button: ->addElement('submit', 'login', array('label' => 'Login')); return $form; } function indexAction () { $this->_redirect('/'); } function loginAction () { $this->view->message = ''; $form = $this->getForm(); $this->view->form = $form; if ($this->_request->isPost()) { $this->_helper->viewRenderer->setNoRender(true); $formData = $this->_request->getPost(); if ($form->isValid($formData)) { // collect the data from the user Zend_Loader::loadClass('Zend_Filter_StripTags'); $f = new Zend_Filter_StripTags(); $username = $f->filter($formData['username']); $password = $f->filter($formData['password']); // setup Zend_Auth adapter for a database table Zend_Loader::loadClass('Zend_Auth_Adapter_DbTable'); $dbAdapter = Zend_Registry::get('dbAdapter'); $authAdapter = new Zend_Auth_Adapter_DbTable($dbAdapter); $authAdapter->setTableName('users'); $authAdapter->setIdentityColumn('username'); $authAdapter->setCredentialColumn('password'); // Set the input credential values to authenticate against $authAdapter->setIdentity($username); $authAdapter->setCredential($password); // do the authentication $auth = Zend_Auth::getInstance(); $result = $auth->authenticate($authAdapter); if ($result->isValid()) { // success: store database row to auth's storage $data = $authAdapter->getResultRowObject(null, 'password'); $auth->getStorage()->write($data); $this->_redirect('/'); } else { // failure: clear database row from session $this->view->message = 'Login failed.'; } } } $this->view->title = "Log in"; $this->view->bodyCopy = "<p>Please fill out this form.</p>"; } public function gaucheAction() { $auth = Zend_Auth::getInstance(); if ($auth->hasIdentity()) { $this->view->identity = $auth->getIdentity(); $this->render('hello'); }else{ $this->view->form = $this->getForm(); $this->render('auth'); } } function logoutAction () { Zend_Auth::getInstance()->clearIdentity(); $this->_redirect('/'); } } ?>
Dernière modification par sebondus (31-03-2008 16:47:29)
Hors ligne
Dans l'action:
$this->render('auth', 'gauche')
Dans le layout:
<td width="20%">
<?= $this->layout()->gauche ?>
<?php $this->action('gauche','auth') ?>
</td>
Dernière modification par or4cle (31-03-2008 11:31:36)
Hors ligne
Merci, c'était tout simple.
Il fallait aussi mettre
else{ $this->_helper->viewRenderer->setNoRender(true); }
au lieu de
else{ $this->view->form = $this->getForm(); $this->render('auth'); }
Dans gaucheAction
Dernière modification par sebondus (31-03-2008 11:57:29)
Hors ligne
Salut sebondus,
tu me semble avoir ce que je recherche "un module d'authentification intégré au layout",
j'ai pas habitude de demander ça, mais pourrais-tu c/c ton code (avec qq explications) stp,
ou me donner le lien du tuto que tu as suivi ??
ça serait vraiment cool de ta part
Hors ligne
Pages: 1