Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 31-03-2008 10:33:52

phpman
Membre
Date d'inscription: 20-03-2008
Messages: 138

[1.5][Résolu]Probleme de layout et authentification

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.

Code:

<!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 hmm

Code:

<?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

 

#2 31-03-2008 11:30:19

or4cle
Membre
Date d'inscription: 18-02-2008
Messages: 70

Re: [1.5][Résolu]Probleme de layout et authentification

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

 

#3 31-03-2008 11:56:44

phpman
Membre
Date d'inscription: 20-03-2008
Messages: 138

Re: [1.5][Résolu]Probleme de layout et authentification

Merci, c'était tout simple.
Il fallait aussi mettre

Code:

else{
            $this->_helper->viewRenderer->setNoRender(true);
}

au lieu de

Code:

else{
            $this->view->form = $this->getForm();
            $this->render('auth');
}

Dans gaucheAction

Dernière modification par sebondus (31-03-2008 11:57:29)

Hors ligne

 

#4 24-01-2012 18:23:30

cyrille.t
Membre
Date d'inscription: 16-01-2012
Messages: 15

Re: [1.5][Résolu]Probleme de layout et authentification

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 wink

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages