首页 > 解决方案 > 将属性传递给 Doctrine AbstractIdGenerator

问题描述

我需要将 LoggerInterface 传递给@ORM\CustomIdGenerator(class=MyGenerator::class)中使用的MyGenerator

Doctrine 不使用 symfony 容器来实例化生成器,我最终得到一个 Exception Too little arguments to function如何在我的 id 生成器中使用 LoggerInterface?

标签: symfonydoctrine

解决方案


不幸的是,无法将 LoggerInterface 注入 MyGenerator 类,因为它不是服务,与服务容器无关。但是,在 AbstractIdGenerator 中有一个 EntityManager 可用,它为解决方案提供了基础,以便通过数据库表传播日志。之后,您将能够通过 cronjob 从表中获取日志消息并编写适当的日志或做任何您需要的事情。

class MyGenerator extends AbstractIdGenerator
{
    public function generate(EntityManager $em, $entity)
    {
        $identifier = '...'; // generate an identifier

        // push a log message to a db
        $query = $em->createQuery('INSERT INTO db.logger (id, message, created_at) VALUES (null, :message, NOW())');
        $query->setParameter('message', 'Log message...');
        $query->execute();

        return $identifier;
    }
}

推荐阅读