ZF2 getServiceLocator dans ControllerPlugin classe

Je suis en train d'essayer d'obtenir le service locator/gestionnaire d'entité dans la classe de plugin, Comment puis-je obtenir.

Dans mon contrôleur, je suis comme ça.

public function getEntityManager()
{
    if(null === $this->em){
        $this->em = $this->getServiceLocator()->get('doctrine.entitymanager.orm_default');
    }
    return $this->em;
}

public function setEntityManager(EntityManager $em)
{
    $this->em = $em;
}

mais dans la classe de plugin, j'obtiens l'erreur sur $this->getServiceLocator() de la ligne. parce que ce n'est pas disponible dans la classe de plugin.

Comment puis-je faire de même afin que je puisse aller chercher des dossiers et insérer quelques dans la base de données dans le plugin.

J'ai MvcEvent $e de l'objet dans ma classe de plugin, je peux me servir de cela pour obtenir de l'entité gestionnaire?

J'ai utilisé ce plugin pour créer mon plugin

Tout guide sera appriciated.

mise à jour:

namespace Auth\Controller\Plugin;
use Zend\Mvc\Controller\Plugin\AbstractPlugin;
use Zend\EventManager\EventInterface as Event;
use Zend\Authentication\AuthenticationService;
use Doctrine\ORM\EntityManager;
use Auth\Entity\User;
use Zend\Mvc\MvcEvent;
class AclPlugin extends AbstractPlugin
{
/*
* @var Doctrine\ORM\EntityManager
*/
protected $em;
public function checkAcl($e)
{
$auth = new AuthenticationService();
if ($auth->hasIdentity()) {
$storage = $auth->getStorage()->read();            
if (!empty($storage->role))
$role = strtolower ( $storage->role );            
else 
$role = "guest";            
} else {
$role = "guest";            
}
$app = $e->getParam('application');
$acl          = new \Auth\Acl\AclRules(); 
$matches      = $e->getRouteMatch();
$controller   = $matches->getParam('controller');
$action       = $matches->getParam('action', 'index');
$resource = strtolower( $controller );
$permission = strtolower( $action );
if (!$acl->hasResource($resource)) {
throw new \Exception('Resource ' . $resource . ' not defined');
}
if ($acl->isAllowed($role, $resource, $permission)) {
$query = $this->getEntityManager($e)->createQuery('SELECT u FROM Auth\Entity\User u');
$resultIdentities = $query->execute();
var_dump($resultIdentities);
exit();
return;
} else {
$matches->setParam('controller', 'Auth\Controller\User'); //redirect
$matches->setParam('action', 'accessdenied');    
return;
}
}
public function getEntityManager($e) {
var_dump($this->getController()); //returns null
exit();
if (null === $this->em) {
$this->em = $this->getController()->getServiceLocator()->get('doctrine.entitymanager.orm_default');
}
return $this->em;
}
public function setEntityManager(EntityManager $em) {
$this->em = $em;
}
}

Que j'appelle ' la classe ci-dessus dans module.php

    public function onBootstrap(Event $e) 
{
$application = $e->getApplication();        
$services    = $application->getServiceManager();        
$eventManager = $e->getApplication()->getEventManager();
$eventManager->attach('dispatch', array($this, 'loadConfiguration'),101);
}
public function loadConfiguration(MvcEvent $e)
{
$e->getApplication()->getServiceManager()
->get('ControllerPluginManager')->get('AclPlugin')
->checkAcl($e); //pass to the plugin...      
}

Je suis l'enregistrement de ce plugin module.config.php

return array(  
'controllers' => array(
'invokables' => array(
'Auth\Controller\User' => 'Auth\Controller\UserController',
),
), 
'controller_plugins' => array(
'invokables' => array(
'AclPlugin' => 'Auth\Controller\Plugin\AclPlugin',
),  
),
);

OriginalL'auteur Developer | 2012-09-14

Leave a Reply

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *