Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 23-11-2011 11:34:49

booradley
Membre
Date d'inscription: 10-01-2009
Messages: 163

[zf2.0beta1] : \Zend\Authentication (et __PHP_Incomplete_Class)

Bonjour j'essaie de m'authentifier via SpiffyDoctrine en utilisant la session comme storage :

Code:

$doctrineAuthAdapter = new \SpiffyDoctrine\Authentication\Adapter\DoctrineEntity(
                                        $this->_em,
                                        'Entity\TMembre',
                                        $identityColumn,
                                        'password',
                                        null
                                        );
                                    
            $doctrineAuthAdapter->setIdentity($identity);
            $doctrineAuthAdapter->setCredential($password);
    
            $authenticationService = new \Zend\Authentication\AuthenticationService(new \Zend\Authentication\Storage\Session());
            $authResult = $authenticationService->authenticate($doctrineAuthAdapter);

A la suite de ce code je teste le contenu enregistré en session:

Code:

// test
$authenticationService = new \Zend\Authentication\AuthenticationService();
$userinfo = $authenticationService->getIdentity();
\Zend\Debug::dump($userinfo);
\Zend\Debug::dump($userinfo->getId());

Cela m'affiche bien un object(Entity\TMembre) et un identifiant numérique.

Par contre quand je réalise ce même test dans un autre controller quelconque j'ai :
\Zend\Debug::dump($userinfo) affiche : object(__PHP_Incomplete_Class)...
puis
\Zend\Debug::dump($userinfo->getId()) génère une erreur :
The script tried to execute a method or access a property of an incomplete object.
Please ensure that the class definition "Entity\TMembre" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition

Pourtant dans Module.php de SpiffyDoctrine j'ai bien le code pour charger les entities et j'ai vérifié, il est bien appelé:

Code:

public function getAutoloaderConfig()
    {
        return array(
            'Zend\Loader\ClassMapAutoloader' => array(
                __DIR__ . '/autoload_classmap.php',
            ),
            'Zend\Loader\StandardAutoloader' => array(
                'namespaces' => array(
                    'Entity' => APPLICATION_PATH . '/models/Entity',
                   'Repository' => APPLICATION_PATH . '/models/Repository',
                ),
            ),
        );
    }

J'avais déjà rencontré ce pb avec zf1 et j'avais utilisé le paliatif suivant.
Je sérialisais l'entity avant de l'enregistrer
$myAuth->getStorage()->write(serialize($identity));
Puis je désérialisais pour la récupérer.

Mais à mon avis y'a un truc que je dois pas faire correctement...

Dernière modification par booradley (23-11-2011 11:38:36)

Hors ligne

 

#2 23-11-2011 11:45:23

bakura
Administrateur
Date d'inscription: 30-01-2010
Messages: 353

Re: [zf2.0beta1] : \Zend\Authentication (et __PHP_Incomplete_Class)

Je dois partir j'ai pas le temps de lire ton code, mais voici le miens pour l'authentication :

Code:

public function authenticate($email, $password)
        {
            $adapter = new DoctrineEntity($this->em, 'Application\Model\User', 'email', 'password');
            $adapter->setIdentity($email)
                    ->setCredential($this->hash($password));

            $result = $adapter->authenticate();

            if (!$result->isValid()) {
                return false;
            }

            $user = $result->getIdentity();
            $this->authentication->getStorage()->write($user);

            // On met à jour la date de connexion au passage
            $user->loggedAt = new \DateTime('now');
            $this->em->persist($user);
            $this->em->flush();

            return true;
        }

Hors ligne

 

#3 23-11-2011 13:28:57

booradley
Membre
Date d'inscription: 10-01-2009
Messages: 163

Re: [zf2.0beta1] : \Zend\Authentication (et __PHP_Incomplete_Class)

J'ai la même erreur avec ce code.
Mais il a avantage d'appeler directement la méthode write() et donc j'ai adapté ton code comme ceci:
$authenticationService->getStorage()->write(serialize($identity));

Maintenant je n'ai plus qu'a désérialiser et ca marche.

Merci encore bakura!

Hors ligne

 

#4 23-11-2011 15:51:41

bakura
Administrateur
Date d'inscription: 30-01-2010
Messages: 353

Re: [zf2.0beta1] : \Zend\Authentication (et __PHP_Incomplete_Class)

De rien ^^. Je crois que tu auras posé des questions sur un peu prés tous les composants nouveaux de ZF 2 lol ! Bonne nouvelle pour toi : la bêta 2 arrive très très bientôt avec Zend\Mail, Zend\Cache et Zend\Log refait big_smile.

Hors ligne

 

#5 23-11-2011 21:39:59

booradley
Membre
Date d'inscription: 10-01-2009
Messages: 163

Re: [zf2.0beta1] : \Zend\Authentication (et __PHP_Incomplete_Class)

Oui je continue ma migration petit a petit .
J'aurai surement d'autres questions.
Mais soit je suis le seul a avoir des problèmes soit personne en France ne s'intéresse a zf2!!! lol

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