我们可以使用$this-> getServiceLocator() – > get(‘doctrine.entitymanager.orm_default’)访问控制器内的实体管理器;
但是我们怎样才能在Zendframework 2中的项目的其余部分访问实体管理器单例实例.
“正确”的方法是使用工厂将实体管理器注入任何需要它的类.除工厂之外的类不应该真正了解ServiceLocator.所以,你的模块配置看起来像这样:
'controllers' => array( 'factories' => array( 'mycontroller' => 'My\Namespace\MyControllerFactory' ) )
然后你的工厂类看起来像这样:
use Zend\ServiceManager\FactoryInterface; use Zend\ServiceManager\ServiceLocatorInterface; class MyControllerFactory implements FactoryInterface { public function createService(ServiceLocatorInterface $serviceLocator) { $serviceLocator = $serviceLocator->getServiceLocator(); $myController = new MyController; $myController->setEntityManager( $serviceLocator->get('doctrine.entitymanager.orm_default') ); return $myController; } }
对于需要使用实体管理器的任何其他类,遵循相同的模式.
如果您有许多使用实体管理器的类,您可能需要考虑将自己的Initalizer添加到SerivceManager,它将注入实体管理器而无需工厂.
原文地址:https://www.jb51.cc/php/133493.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。