Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 26-05-2012 08:13:55

allerGrep
Membre
Date d'inscription: 04-12-2008
Messages: 15

Problème avec auth

Hello à tous,
J'ai suivi exactement le mode de création de gestion d'user sur le site de zend : http://framework.zend.com/manual/fr/lea … tion.html.
Mais après j'ai toujours cette erreur :

An error occurred

Application error

Exception information:

Message: Zend_Form::isValid expects an array

Stack trace:

#0 D:\wamp\www\Patients\application\controllers\AuthController.php(17): Zend_Form->isValid()
#1 D:\wamp\www\Patients\library\Zend\Controller\Action.php(516): AuthController->loginAction()
#2 D:\wamp\www\Patients\library\Zend\Controller\Dispatcher\Standard.php(295): Zend_Controller_Action->dispatch('loginAction')
#3 D:\wamp\www\Patients\library\Zend\Controller\Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
#4 D:\wamp\www\Patients\library\Zend\Application\Bootstrap\Bootstrap.php(97): Zend_Controller_Front->dispatch()
#5 D:\wamp\www\Patients\library\Zend\Application.php(366): Zend_Application_Bootstrap_Bootstrap->run()
#6 D:\wamp\www\Patients\public\index.php(26): Zend_Application->run()
#7 {main} 
Request Parameters:

array (
  'controller' => 'auth',
  'action' => 'login',
  'module' => 'default',
)

Le problème se situe au niveau de IF.

Quelqu'un peut-il m'aider, SVP?

Merci de votre compréhension et de votre aide si précieuse,

Séraphine

Hors ligne

 

#2 26-05-2012 08:56:31

tdutrion
Administrateur
Lieu: Dijon, Paris, Edinburgh
Date d'inscription: 23-12-2009
Messages: 614
Site web

Re: Problème avec auth

Bonjour,

Le problème ne se trouve pas au niveau du if mais plutôt au niveau du isValid comme l'indique la trace...

#0 D:\wamp\www\Patients\application\controllers\AuthController.php(17): Zend_Form->isValid()

Comme on peut le constater, tu effectue un isValid sur ton form, et il me semble que le isValid de la doc est fait sur un auth adapter, d'où ton erreur (le form prends en paramètre de isValid un array, l'adapter d'auth ne prends pas de paramètres).

Pourrais-tu mettre le code de ton action ?

Hors ligne

 

#3 26-05-2012 21:13:22

allerGrep
Membre
Date d'inscription: 04-12-2008
Messages: 15

Re: Problème avec auth

Merci beaucoup pour ton aide :
Voici la seule fonction de AuthController

public function loginAction()
    {
        $db = $this->_getParam('patientsdb');

        $loginForm = new Default_Form_Auth_Login($_POST);

        if ($loginForm->isValid()) {

            $adapter = new Zend_Auth_Adapter_DbTable(
                $db,
                'users',
                'username',
                'password',
                'MD5(CONCAT(?, password_salt))'
                );

            $adapter->setIdentity($loginForm->getValue('username'));
            $adapter->setCredential($loginForm->getValue('password'));

            $result = $auth->authenticate($adapter);

            if ($result->isValid()) {
                $this->_helper->FlashMessenger('Successful Login');
                $this->redirect('/');
                return;
            }

        }

        $this->view->loginForm = $loginForm;

    }

   
        function logoutAction()
        {
            Zend_Auth::getInstance()->clearIdentity();
            $this->_redirect('/');
        }

}

Les 3 fonctions de IndexController, en plus de add, delete et edit :

function preDispatch()
    {
        $auth = Zend_Auth::getInstance();
        if (!$auth->hasIdentity()) {
        $this->_redirect('auth/login');
    }
    }

   
    public function init()
    {
       
        $this->initView();
        Zend_Loader::loadClass('patient');
        $this->view->baseUrl = $this->_request->getBaseUrl();
        $this->view->user = Zend_Auth::getInstance()->getIdentity();
       
    }

  public function indexAction()
    {
       $user = new Application_Model_DbTable_Users();
       $this->view->user = $user->fetchAll();
    }

Le contenu de login.phtml

<?php

$this->form->setAction($this->url());
echo $this->form;
?>

As-tu besoin d'autres infos stp?
Bonne soirée,

Dernière modification par allerGrep (27-05-2012 03:56:07)

Hors ligne

 

#4 27-05-2012 02:17:34

tdutrion
Administrateur
Lieu: Dijon, Paris, Edinburgh
Date d'inscription: 23-12-2009
Messages: 614
Site web

Re: Problème avec auth

Bonsoir,

Détrompes moi en cas d'erreur.

La ligne suivante est la ligne 17 de ton controller :

Code:

[lang=php]if ($loginForm->isValid()) {

Il se trouve que ce devrait plutôt être :

Code:

[lang=php]
if ($loginForm->isValid($this->_request->getPost())) {

Au passage, utilises plutôt $this->_request->getPost() que $_POST dans tes projets Zend, et ensuite utilises la méthode populate de Zend_Form pour mettre des valeurs à ton formulaire.

Hors ligne

 

#5 27-05-2012 09:58:47

allerGrep
Membre
Date d'inscription: 04-12-2008
Messages: 15

Re: Problème avec auth

Merci bcp. C'est exactement ça le problème.
Encore une fois merci

Hors ligne

 

#6 27-05-2012 10:38:48

allerGrep
Membre
Date d'inscription: 04-12-2008
Messages: 15

Re: Problème avec auth

Hello,
J'ai un autre problème.
Voici l'erreur :

Fatal error: Call to a member function setAction() on a non-object in D:\wamp\www\Patients\application\views\scripts\auth\login.phtml on line 8

Voici le contenu de auth/login.phtml

<?php
(ligne 8) $this->form->setAction($this->url());
echo $this->form;
?>

Ma vraie question est de savoir où se trouve la setAction($this->url()), de  application/views/scripts/auth/login.phtml sur l'exemple du site :

http://framework.zend.com/manual/fr/learning.multiuser.authentication.html

En fait j'ai pris l'exemple sur le site.
Merci d'avance de votre aide,

Dernière modification par allerGrep (27-05-2012 11:06:22)

Hors ligne

 

#7 27-05-2012 11:05:46

tdutrion
Administrateur
Lieu: Dijon, Paris, Edinburgh
Date d'inscription: 23-12-2009
Messages: 614
Site web

Re: Problème avec auth

Qu'est-ce que c'est que cette ligne et à quoi est-elle sensé servir ?

$this->form fait appel à quelle ligne ? Je vois à la fin de l'action login que tu as la ligne suivante :

Code:

[lang=php]$this->view->loginForm = $loginForm;

Donc dans ton phtml, tu ne dois pas avoir d'appel à $this->form mais $this->loginForm.

Hors ligne

 

#8 27-05-2012 11:18:12

allerGrep
Membre
Date d'inscription: 04-12-2008
Messages: 15

Re: Problème avec auth

Salut Thécrite,
J'ai toujours une erreur à la même ligne, quand j'ai remplacé comme demandé:

Notice: Indirect modification of overloaded property Zend_View::$view has no effect in D:\wamp\www\Patients\application\views\scripts\auth\login.phtml on line 8

En fait j'ai pris l'exemple sur le site de  application/views/scripts/auth/login.phtml, dont voici le lien:

http://framework.zend.com/manual/fr/learning.multiuser.authentication.html

Peux tu me dire où se situe vraiment l'erreur?
Merci d'avance de ton aide,

Hors ligne

 

#9 27-05-2012 11:20:42

tdutrion
Administrateur
Lieu: Dijon, Paris, Edinburgh
Date d'inscription: 23-12-2009
Messages: 614
Site web

Re: Problème avec auth

Montre moi ta ligne 8.

Tu aurais pas mis $this->view->loginForm au lieu de $this->loginForm ?

Hors ligne

 

#10 27-05-2012 11:23:15

allerGrep
Membre
Date d'inscription: 04-12-2008
Messages: 15

Re: Problème avec auth

La voici :

$this->view->loginForm = $loginForm;

Hors ligne

 

#11 27-05-2012 11:25:35

tdutrion
Administrateur
Lieu: Dijon, Paris, Edinburgh
Date d'inscription: 23-12-2009
Messages: 614
Site web

Re: Problème avec auth

C'est ta ligne 8 de ton login.phtml ?

Cette ligne se retrouve en dernier dans ton action login, mais elle n'a rien à faire dans le phtml.

La ligne 8 de ton login.phtml était initialement $this->form->setAction($this->url()); et doit devenir $this->loginForm->setAction($this->url());

De même la ligne 9 doit passer de $this->form à $this->loginForm

Hors ligne

 

#12 27-05-2012 11:33:38

allerGrep
Membre
Date d'inscription: 04-12-2008
Messages: 15

Re: Problème avec auth

Cool ça a marché, comme sur des roulettes smile.

Par contre quand je me connecte, il me sort cette erreur :

Notice: Undefined variable: auth in D:\wamp\www\Patients\application\controllers\AuthController.php on line 32

Voici la ligne concernée :

$result = $auth->authenticate($adapter);

Qu'est ce qui n'est pas défini et où il faut le définir, stp?

Hors ligne

 

#13 27-05-2012 11:40:17

tdutrion
Administrateur
Lieu: Dijon, Paris, Edinburgh
Date d'inscription: 23-12-2009
Messages: 614
Site web

Re: Problème avec auth

Il te manque en effet une ligne définissant ce qu'est auth...

Code:

[lang=php]$auth = Zend_Auth::getInstance();

C'est vrai que cette page de la doc est pas exceptionnelle. Je te conseille de lire ce tutoriel de Rob Allen qui comme à son habitude fournis un code propre et des explications correctes : Getting Started with Zend Auth.

Hors ligne

 

#14 27-05-2012 11:49:17

allerGrep
Membre
Date d'inscription: 04-12-2008
Messages: 15

Re: Problème avec auth

Super ça a marché mais une autre erreur.
Je regarde le lien et j'essaie d'abord et après je reviens vers toi

MERCI MERCI & MERCI

Hors ligne

 

#15 27-05-2012 22:32:52

allerGrep
Membre
Date d'inscription: 04-12-2008
Messages: 15

Re: Problème avec auth

Hello Théocrite,
J'ai toujours une erreur ou rien.
Voici l'erreur :

An error occurred

Application error

Exception information:

Message: The supplied parameters to Zend_Auth_Adapter_DbTable failed to produce a valid sql statement, please check table and column names for validity.

Stack trace:

#0 D:\wamp\www\Patients\library\Zend\Auth\Adapter\DbTable.php(369): Zend_Auth_Adapter_DbTable->_authenticateQuerySelect(Object(Zend_Db_Select))
#1 D:\wamp\www\Patients\library\Zend\Auth.php(117): Zend_Auth_Adapter_DbTable->authenticate()
#2 D:\wamp\www\Patients\application\controllers\AuthController.php(64): Zend_Auth->authenticate(Object(Zend_Auth_Adapter_DbTable))
#3 D:\wamp\www\Patients\library\Zend\Controller\Action.php(516): AuthController->loginAction()
#4 D:\wamp\www\Patients\library\Zend\Controller\Dispatcher\Standard.php(295): Zend_Controller_Action->dispatch('loginAction')
#5 D:\wamp\www\Patients\library\Zend\Controller\Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
#6 D:\wamp\www\Patients\library\Zend\Application\Bootstrap\Bootstrap.php(97): Zend_Controller_Front->dispatch()
#7 D:\wamp\www\Patients\library\Zend\Application.php(366): Zend_Application_Bootstrap_Bootstrap->run()
#8 D:\wamp\www\Patients\public\index.php(27): Zend_Application->run()
#9 {main} 
Request Parameters:

array (
  'controller' => 'auth',
  'action' => 'login',
  'module' => 'default',
  'username' => 'admin',
  'password' => 'admin',
  'submit' => 'Login',
)

Et voici la fonction concernée de mon AuthController.php

public function loginAction()
    {
        $db = $this->_getParam('patientsdb');
        //$this->_request->getPost()

       // $loginForm = new Default_Form_Auth_Login($_POST);
        $loginForm = new Default_Form_Auth_Login($this->_request->getPost());

        if ($loginForm->isValid($this->_request->getPost())) {

            $adapter = new Zend_Auth_Adapter_DbTable(
                $db,
                'users',
                'username',
                'password',
                'MD5(CONCAT(?, password_salt))'
                );

            $adapter->setIdentity($loginForm->getValue('username'));
            $adapter->setCredential($loginForm->getValue('password'));
           
            $auth = Zend_Auth::getInstance();
(ligne 64)    $result = $auth->authenticate($adapter);

            if ($result->isValid()) {
                $this->_helper->FlashMessenger('Successful Login');
                $this->redirect('/');
                return;
            }

        }

        $this->view->loginForm = $loginForm;

    }

J'arrive pas à mettre un fichier attaché sinon j'allais envoyé le fichier en entier.
Je ne sais pas le vrai problème, stp.

Merci de ton aide

Hors ligne

 

#16 27-05-2012 22:42:11

tdutrion
Administrateur
Lieu: Dijon, Paris, Edinburgh
Date d'inscription: 23-12-2009
Messages: 614
Site web

Re: Problème avec auth

Dans ta ligne $adapter = new Zend_Auth_Adapter_DbTable, tu passe en premier paramètre une string si je ne m'abuse, or il attends un Zend_Db_Table_Adapter.

Je pense que ton problème vient de là. Il faut que tu lui passes ton adapter Zend_Db.

Hors ligne

 

#17 27-05-2012 23:18:25

allerGrep
Membre
Date d'inscription: 04-12-2008
Messages: 15

Re: Problème avec auth

Merci bcp
Je pense que j'ai mal compris car même en changeant j'ai toujours l'erreur

Hors ligne

 

#18 27-05-2012 23:20:01

tdutrion
Administrateur
Lieu: Dijon, Paris, Edinburgh
Date d'inscription: 23-12-2009
Messages: 614
Site web

Hors ligne

 

#19 27-05-2012 23:24:15

allerGrep
Membre
Date d'inscription: 04-12-2008
Messages: 15

Re: Problème avec auth

$dbAdapter à la place de $db, qui n'a pas marché
j'ai remplacé $adapter = new Zend_Auth_Adapter_DbTable par $adapter = new Zend_Db, Zend_Db_Table.
Rien n'a faire

Hors ligne

 

#20 27-05-2012 23:28:16

tdutrion
Administrateur
Lieu: Dijon, Paris, Edinburgh
Date d'inscription: 23-12-2009
Messages: 614
Site web

Re: Problème avec auth

Je pense que tu ne comprends pas bien ce que tu fais... Essaye de décortiquer un peu tes lignes, car la je mâche le travail et tu ne progresses pas.

Il faut que tu indiques à Zend_Auth_Adapter_DbTable où trouver ta base de donnée. Et pour celà, il faut que tu lui passe un objet de type Zend_Db_Adapter : Zend_Db_Table::getDefaultAdapter()

Hors ligne

 

#21 27-05-2012 23:42:30

allerGrep
Membre
Date d'inscription: 04-12-2008
Messages: 15

Re: Problème avec auth

Merci je continue la recherche.
Pas évident je suis débutante ...

Bonne soirée et encore merci

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