首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >独立注入原则实体管理器

独立注入原则实体管理器
EN

Stack Overflow用户
提问于 2014-07-02 14:09:26
回答 1查看 1.2K关注 0票数 2

我正在Symfony框架之外开发一个小应用程序,我想使用Symfony依赖注入组件来自动解析我的存储库,它在构造函数中需要\Doctrine\ORM\EntityManager作为参数。

我希望将现有实例绑定到依赖项注入容器--但我似乎无法从文档中找到这一点。容器似乎使用反射来获取实例的类名,然后创建一个新实例。变量$entityManager\Doctrine\ORM\EntityManager的一个实例。

代码语言:javascript
复制
$container = new ContainerBuilder();
$container->register('doctrine.orm.entitymanager', $entityManager);
var_dump($container->get('doctrine.orm.entitymanager'));

如果我试图解析实例,组件将抛出一个ReflectionException。正确的方法是什么?

代码语言:javascript
复制
PHP Fatal error:  Uncaught exception 'ReflectionException' with message 'Access to non-public constructor of class Doctrine\ORM\EntityManager' in /vagrant/sfs/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/ContainerBuilder.php:955
Stack trace:
#0 /vagrant/sfs/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/ContainerBuilder.php(955): ReflectionClass->newInstanceArgs(Array)
#1 /vagrant/sfs/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/ContainerBuilder.php(488): Symfony\Component\DependencyInjection\ContainerBuilder->createService(Object(Symfony\Component\DependencyInjection\Definition), 'doctrine.orm.en...')
#2 /vagrant/sfs/test.php(12): Symfony\Component\DependencyInjection\ContainerBuilder->get('doctrine.orm.en...')
#3 {main}
  thrown in /vagrant/sfs/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/ContainerBuilder.php on line 955

Fatal error: Uncaught exception 'ReflectionException' with message 'Access to non-public constructor of class Doctrine\ORM\EntityManager' in /vagrant/sfs/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/ContainerBuilder.php:955
Stack trace:
#0 /vagrant/sfs/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/ContainerBuilder.php(955): ReflectionClass->newInstanceArgs(Array)
#1 /vagrant/sfs/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/ContainerBuilder.php(488): Symfony\Component\DependencyInjection\ContainerBuilder->createService(Object(Symfony\Component\DependencyInjection\Definition), 'doctrine.orm.en...')
#2 /vagrant/sfs/test.php(12): Symfony\Component\DependencyInjection\ContainerBuilder->get('doctrine.orm.en...')
#3 {main}
  thrown in /vagrant/sfs/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/ContainerBuilder.php on line 955
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-02 14:23:18

如果尝试使用新命令插入实体管理器,这将无法工作。

代码语言:javascript
复制
new EntityManager();

您必须使用EntityManagerFactory。https://github.com/doctrine/DoctrineORMModule/blob/master/src/DoctrineORMModule/Service/EntityManagerFactory.php

但是EntityManager在Symfony2中已经注册为服务。

代码语言:javascript
复制
$container->get('doctrine.orm.entity_manager');
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24533332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档