Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
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
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
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
Bonsoir,
Détrompes moi en cas d'erreur.
La ligne suivante est la ligne 17 de ton controller :
[lang=php]if ($loginForm->isValid()) {
Il se trouve que ce devrait plutôt être :
[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
Merci bcp. C'est exactement ça le problème.
Encore une fois merci
Hors ligne
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
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 :
[lang=php]$this->view->loginForm = $loginForm;
Donc dans ton phtml, tu ne dois pas avoir d'appel à $this->form mais $this->loginForm.
Hors ligne
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
Montre moi ta ligne 8.
Tu aurais pas mis $this->view->loginForm au lieu de $this->loginForm ?
Hors ligne
La voici :
$this->view->loginForm = $loginForm;
Hors ligne
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
Cool ça a marché, comme sur des roulettes .
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
Il te manque en effet une ligne définissant ce qu'est auth...
[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
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
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
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
Merci bcp
Je pense que j'ai mal compris car même en changeant j'ai toujours l'erreur
Hors ligne
Tu as mis quoi à la place ?
Hors ligne
$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
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
Merci je continue la recherche.
Pas évident je suis débutante ...
Bonne soirée et encore merci
Hors ligne