2012-12-07 13 views
6

Ho due controller nel mio modulo ed entrambi devono vedere se l'utente è connesso o meno. I controller di accesso autenticano l'utente utilizzando DbTable e scrive l'identità nella memoria.zend framework 2 AuthenticationService

Sto usando> Zend \ Authentication \ AuthenticationService; $ auth = new AuthenticationService();

all'interno della funzione di controllo, ma poi ho istanziare la sua istanza sulla pageAction multipla()

per questo ho scritto una funzione nel Module.php

come segue

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(); 

       } 
      ), 
     ); 
    } 

come si può vedere sto restituendo il nuovo AuthenticationService() ogni volta che penso che sia cattivo. Non sono riuscito a trovare il modo di afferrare l'istanza già istanziata del servizio o devo scrivere una classe singleton per questo. Si prega di avvisare qualsiasi snipet di codice di esempio con una spiegazione più approfondita sarebbe molto apprezzato e apprezzato grazie.

risposta

2

Prova a modificare:

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; 
      }, 
     ), 
    ); 
} 

Nota principalmente sezione della matrice radice il 'alias', tutte le altre modifiche sono solo cosmetici e si può scegliere di fare il modo originale hai suggerito (come l'utilizzo di una fabbrica per recuperare l'istanza Zend \ Db \ Adapter \ Adapter anziché aliasing anche questa).

Cordiali saluti,

Ise

+0

O, naturalmente, se non si vuole avere un servizio specifico modulo, è possibile utilizzare solo $ serviceManager-> get ('Zend \ Authentication \ AuthenticationService') ; – ise

+0

grazie mille che era esattamente quello che stavo cercando. –