2012-12-07 7 views
6

J'ai deux contrôleurs dans mon module et tous les deux ont besoin de voir si l'utilisateur est connecté ou non. Les contrôleurs de connexion authentifie l'utilisateur à l'aide de DbTable et écrit l'identité dans le stockage. J'utilise> Zend \ Authentication \ AuthenticationService; $ auth = new AuthenticationService();zend framework 2 AuthenticationService

dans la fonction de contrôleur, mais alors j'instancier son instance sur plusieurs pageaction()

pour ce que j'ai écrit une fonction dans le module.php

comme suit

public function getServiceConfig() 
    { 
     return array(
      'factories' => array(
       'Application\Config\DbAdapter' => function ($sm) { 
        $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter'); 
        return $dbAdapter; 
       }, 
       'Admin\Model\PagesTable' => function($sm){ 
        $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter'); 
        $pagesTable = new PagesTable(new TableGateway('pages',$dbAdapter)); 
        return $pagesTable; 
       }, 
       'Admin\Authentication\Service' => function($sm){ 
        return new AuthenticationService(); 

       } 
      ), 
     ); 
    } 

Comme vous pouvez voyez je retourne le nouveau AuthenticationService() chaque fois que je pense est mauvais. Je ne pouvais pas trouver comment attraper l'instance déjà instanciée du service ou je dois écrire une classe singleton pour cela. S'il vous plaît aviser tout échantillon de code snipets avec une explication plus approfondie serait très apprécié et apprécié merci.

Répondre

2

Essayez ceci:

public function getServiceConfig() 
{ 
    return array(
     'aliases' => array(
      'Application\Config\DbAdapter' => 'Zend\Db\Adapter\Adapter', 
      'Admin\Authentication\Service' => 'Zend\Authentication\AuthenticationService', 
     ), 
     'factories' => array(
      'Admin\Model\PagesTable' => function ($serviceManager) { 
       $dbAdapter = $serviceManager->get('Application\Config\DbAdapter'); 
       $tableGateway = new TableGateway('pages', $dbAdapter); 
       $pagesTable = new PagesTable($tableGateway); 
       return $pagesTable; 
      }, 
     ), 
    ); 
} 

note principalement la section «alias de la matrice de racine, d'autres changements ne sont que cosmétiques et vous pouvez préférer faire de façon originale que vous avez suggéré (comme l'utilisation d'une usine récupérer l'instance Zend \ Db \ Adapter \ Adapter au lieu de l'aliaser aussi).

Cordialement,

ise

+0

Ou bien sûr, si vous ne voulez pas avoir un service spécifique du module, vous pouvez simplement utiliser $ serviceManager-> get ('Zend \ Authentication \ AuthenticationService') ; – ise

+0

merci @ise c'était exactement ce que je cherchais. –