【问题标题】:Passing an attribute to Doctrine AbstractIdGenerator将属性传递给 Doctrine AbstractIdGenerator
【发布时间】:2021-01-21 10:11:48
【问题描述】:

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

中使用的 MyGenerator

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

【问题讨论】:

    标签: symfony doctrine


    【解决方案1】:

    不幸的是,无法将 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;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-01
      • 2018-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多