Bonjour,
Désespéré après des heures de recherche sur google, je me tourne vers vous pour exposer mon problème :
Je développe actuellement un site sous Zend Framework, et je travaille sur le module d'authentification, très basique :
- un formulaire de login (view : login.phtml)
- un memberController avec une action processLogin (vers laquel le formulaire redirige)
- un model member, qui représente ma table member en base de donnée mysql
- la table de la base de donnée dispore de 5 champs (id, email, pass, nom, prenom)
Mon problème se situe au niveau du Controller, dans l'action processLogin :
Le login, qui utilise Zend_Auth, se passe sans problème, mais au moment où je veux stocker les informations du membre dans la session, je me mange une exception :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 <?php require_once 'models/Member.php'; class MemberController extends Zend_Controller_Action { //Default action - not implemented public function indexAction() { } //ProcessLogin (called when the login form is validated) public function processLoginAction() { //Get posted informations : the login (email) and password //Filter this informations for security issues $emailAddress = Zend_Filter::get($this->getRequest()->getPost('emailAddress'), 'StripTags'); $passwordFilter = new Zend_Filter(); $passwordFilter->addFilter(new Zend_Filter_HtmlEntities()) ->addFilter(new Zend_Filter_StripTags()); $userPassword = $passwordFilter->filter($this->getRequest()->getPost('userPassword'), 'StripTags'); //Trying to log on with the given email adress and password $memberId=Member::login($emailAddress,$userPassword); //If the login success, we get a numeric member id //So we create a session and we stock informations about the member in it //Then we notify the user of the login success and we redirect him if (is_numeric($memberId)) { $memberSession = new Zend_Session_Namespace('member'); $memberSession->member = new Member($memberId); $this->_helper->flashMessenger->addMessage("Welcome");//" {$memberSession->member->firstName}."); $this->_redirect('/index/index'); } //Else we just notify the user of the error and we redirect him to the login else { $this->_helper->flashMessenger->addMessage("I'm sorry but there was a problem logging you in. Please try again."); $this->_redirect('/index/login'); } } }
Ce qui nous ramène aux 2 lignes suivantes :an unexpected error occured.
Unexpected Exception: Zend_Session::start() - fopen(Member.php) [function.fopen]: failed to open stream: No such file or directory
#0 C:\wamp\www\EasyDon\library\Zend\Session\Namespace.php(116): Zend_Session::start(true)
#1 C:\wamp\www\EasyDon\library\Zend\Controller\Action\Helper\FlashMessenger.php(73): Zend_Session_Namespace->__construct('FlashMessenger')
#2 C:\wamp\www\EasyDon\library\Zend\Controller\Action\HelperBroker.php(330): Zend_Controller_Action_Helper_FlashMessenger->__construct()
#3 C:\wamp\www\EasyDon\library\Zend\Controller\Action\HelperBroker.php(191): Zend_Controller_Action_HelperBroker::_loadHelper('FlashMessenger')
#4 C:\wamp\www\EasyDon\application\controllers\IndexController.php(9): Zend_Controller_Action_HelperBroker->getHelper('flashMessenger')
#5 C:\wamp\www\EasyDon\library\Zend\Controller\Action.php(499): IndexController->indexAction()
#6 C:\wamp\www\EasyDon\library\Zend\Controller\Dispatcher\Standard.php(242): Zend_Controller_Action->dispatch('indexAction')
#7 C:\wamp\www\EasyDon\library\Zend\Controller\Front.php(927): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
#8 C:\wamp\www\EasyDon\public\index.php(36): Zend_Controller_Front->dispatch()
#9 {main}
Si je crée juste le namespace, pas de problème.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $memberSession = new Zend_Session_Namespace('member'); $memberSession->member = new Member($memberId);
Si je créer juste le member, pas de problème.
Si j'accède aux attributs du member, pas de problème.
Si j'ajoute une variable texte dans la session, aucun problème !
Ex :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $memberSession = new Zend_Session_Namespace('member'); $memberSession->member = "toto";
Ce qui m'amène à penser que mon problème est que je veux stocker un objet dans la session. Serais-ce imposible ?
Je ne pense pas, mais je n'ai pas la solution pour le faire ... Et c'est là que je compte sur vous
En vous remerciant par avance,
Charles
Partager