php – ControllerPlugin类中的ZF2 getServiceLocator

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – ControllerPlugin类中的ZF2 getServiceLocator脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我想在插件类中获取服务定位器/实体管理器,我该怎么做呢.

在我的控制器中,我得到这样的.

@H_404_3@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; }

但是在插件类中,我在$this-> getServiceLocator()行上收到错误.因为这在插件类中不可用.

怎样才能这样做,以便我可以获取一些记录并在插件中插入少量数据库.

我的插件类中有MvcEvent $e对象,我可以利用它来获取实体管理器吗?

我用this plugin来创建我的插件

任何指南都会受到关注.

更新:

@H_404_3@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; } }

我在module.PHP调用了上面的类

@H_404_3@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... }

我在module.config.PHP注册了这个插件

@H_404_3@return array( 'controllers' => array( 'invokables' => array( 'Auth\Controller\User' => 'Auth\Controller\UserController',),'controller_plugins' => array( 'invokables' => array( 'AclPlugin' => 'Auth\Controller\Plugin\AclPlugin',);
你对“插件类”有什么意思?如果你正在谈论abount控制器插件,你可以使用(从控制器插件的范围)访问它:$this-> getController() – > getServiceLocator() – > get(‘doctrine.entitymanager.orm_default’) ;.

对于其他类,我通常会创建一个自动注入ServiceManager实例的工厂.例如,在Module类中:

@H_404_3@public function getServiceConfig() { return array( 'factories' => array( 'myServiceClass' => function(ServiceManager $sm) { $instance = new Class(); $instance->setServiceManager($sm); // Do some other configuration return $instance; },); } // access it using the ServiceManager where you need it $myService = $sm->get('myService');

脚本宝典总结

以上是脚本宝典为你收集整理的php – ControllerPlugin类中的ZF2 getServiceLocator全部内容,希望文章能够帮你解决php – ControllerPlugin类中的ZF2 getServiceLocator所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。