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);
Ajoutez [lang=php|phtml|javascript|sql|perl|xml|shell|html] au début de votre code pour activer le syntax highlighting

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());
Ajoutez [lang=php|phtml|javascript|sql|perl|xml|shell|html] au début de votre code pour activer le syntax highlighting

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',
                ),
            ),
        );
    }
Ajoutez [lang=php|phtml|javascript|sql|perl|xml|shell|html] au début de votre code pour activer le syntax highlighting

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;
        }
Ajoutez [lang=php|phtml|javascript|sql|perl|xml|shell|html] au début de votre code pour activer le syntax highlighting

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