无效的服务“Doctrine \ ORM \ EntityManager”:它的构造函数必须是公共的

时间:2017-12-16 15:45:39

标签: symfony4

我已将“Doctrine \ ORM \ EntityManager”添加为服务并具有公众可见性:

enter image description here

但是我收到了这个错误:

enter image description here

我想在我的控制器中注入EntityManager。怎么了?

1 个答案:

答案 0 :(得分:1)

您收到错误"" Doctrine \ ORM \ EntityManager":其构造函数必须是公共的。" ,因为默认情况下symfony尝试创建如果没有工厂定义,则使用其名称作为类并调用其构造函数。 Doctrine\ORM\EntityManager:__construct is protected,因此不能在此类之外使用新的EntityManager ,或仅从扩展它的类中使用。

您应该使用create factory method并提供其参数:

parameters:
    doctrine.orm.entitymanager.factory: Doctrine\ORM\EntityManager

services:
    Doctrine\ORM\EntityManager:
        class: Doctrine\ORM\EntityManager
        factory:   ["%doctrine.orm.entitymanager.factory%", "create"]
        arguments:
             $connection: "provide the connection also here"
             $config: "provide the config also here"
        public: true

在这种情况下不需要行类:Doctrine \ ORM \ EntityManager ,如果省略,类将默认为服务名称。

您还必须将工厂参数($ connection& config)定义为服务并将它们提供给工厂。

PS:我不知道你想要做什么,但也许你正在寻找的东西已经可以使用Doctrine Bundle

完成