【发布时间】:2014-08-23 09:00:01
【问题描述】:
我正在 Symfony 框架之外开发一个小型应用程序,我想使用 Symfony 依赖注入组件来自动解析我的存储库,这些存储库需要 \Doctrine\ORM\EntityManager 作为其构造函数中的参数。
我想将现有实例绑定到依赖注入容器 - 但我似乎无法从文档中弄清楚这一点。似乎容器正在使用反射来获取实例的类名,然后创建一个新实例。变量$entityManager 是\Doctrine\ORM\EntityManager 的一个实例。
$container = new ContainerBuilder();
$container->register('doctrine.orm.entitymanager', $entityManager);
var_dump($container->get('doctrine.orm.entitymanager'));
如果我尝试解析实例,该组件会抛出 ReflectionException。解决这个问题的正确方法是什么?
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
【问题讨论】:
标签: php symfony dependency-injection doctrine