【问题标题】:Symfony Dependency Injection Component Standalone Inject Doctrine Entity ManagerSymfony 依赖注入组件独立注入 Doctrine 实体管理器
【发布时间】: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


    【解决方案1】:

    如果您尝试使用新命令初始化实体管理器,这将不起作用。

    new EntityManager();
    

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

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

    $container->get('doctrine.orm.entity_manager');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-23
      • 2020-04-22
      • 2016-01-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多