【问题标题】:symfony: add EntityManager to an Entity Classsymfony:将 EntityManager 添加到实体类
【发布时间】:2016-08-06 19:29:18
【问题描述】:

我有一个名为“投票”的实体,我需要在此类中使用教义来执行一些操作,以将此类中的值集成到 EasyAdmin 捆绑显示列表中。

我的 services.yml 中有这个:

app.user:
        class: AppBundle\Entity\Vote
        calls:
                 - ['setMe', ["doctrine.orm.entity_manager"]]

这在我的课堂上:

public function setMe($entityManager) {
    $this->em = $entityManager;
}

但是 setMe() 永远不会被调用(我正在使用 xdebug)。

所以,我尝试过:

app.user:
    class: AppBundle\Entity\Vote
    calls:
             - ['setMe', ["doctrine.orm.entity_manager"]]
    arguments:    ["@doctrine.orm.entity_manager"]

public function __construct(\Doctrine\ORM\EntityManager $em){
        $this -> date = new \DateTime();
        $this -> em = $em;
    }

但结果相同:$this->em 未设置。

我的错误在哪里?

【问题讨论】:

  • 你的第一个错误是认为配置 Symfony 容器会神奇地导致注入发生。只有当您从容器中拉出实体时,容器才会起作用,这在 Doctrine 2 中不会发生。您的第二个错误是首先尝试注入实体管理器。 Doctrine 2 实体不是活动记录实体。将功能移动到服务类或切换到活动记录库。

标签: service doctrine symfony


【解决方案1】:

我认为,您(几乎)永远不应该在实体中需要实体管理器,而实体不应该是服务。

但如果你真的需要它,你应该使用service container。如果您在控制器中调用$this->get('app.user');,它应该返回Vote 实体。或者使用控制器注入。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-15
    • 2014-12-03
    • 1970-01-01
    • 2018-10-24
    • 1970-01-01
    • 2020-02-18
    • 1970-01-01
    • 2016-03-21
    相关资源
    最近更新 更多