我有一些麻烦,我需要初始化一些 RouteGuard:
RouteGuard.php
namespace Acl\Guard;
class RouteGuard {
public function __construct(EntityManager $em)
{
}
}
模块.php
.........
class Module {
public function onBootstrap(MvcEvent $e)
{
$sm = $e->getApplication()->getServiceManager();
$eventManager = $e->getApplication()->getEventManager();
$eventManager->attach($sm->get('di')->get('Acl\Guard\RouteGuard'));
}
.....
我得到了这个例外:
- 致命错误:未捕获的异常 'Zend\Di\Exception\RuntimeException' 带有消息“无效的实例化器类型为“NULL”,用于“Doctrine\ORM\EntityManager”。在 [projectDir]/vendor/zendframework/zendframework/library/Zend/Di/Di.php 第 767 行
- Zend\Di\Exception\RuntimeException: "Doctrine\ORM\EntityManager" 类型为 "NULL" 的无效实例化器。在 [projectDir]/vendor/zendframework/zendframework/library/Zend/Di/Di.php 第 298 行
- Zend\Di\Exception\MissingPropertyException:第 767 行 [projectDir]/vendor/zendframework/zendframework/library/Zend/Di/Di.php 中 Acl\Service\AclService::__construct 的参数 entityManager 缺少实例/对象
我知道我尝试 get(Doctrine\ORM\EntityManager) 并且 DI 尝试创建新实例并出错,因为 EntityManager 有一个受保护的构造函数。我知道 EntityManager 应该使用静态方法::create 进行实例化,但我看到 DoctrineORMModule 已经有一个 Doctrine\ORM\EntityManager 的实例,其中包含 Doctrine 的配置,那么我如何在 Bootstrap 中使用 DI 获取这个实例?
提前致谢。