【发布时间】:2021-01-21 10:11:48
【问题描述】:
我需要将 LoggerInterface 传递给 @ORM\CustomIdGenerator(class=MyGenerator::class)
中使用的 MyGeneratorDoctrine 不使用 symfony 容器来实例化生成器,我最终得到一个异常 Too few arguments to function 如何在我的 id 生成器中使用 LoggerInterface?
【问题讨论】:
我需要将 LoggerInterface 传递给 @ORM\CustomIdGenerator(class=MyGenerator::class)
中使用的 MyGeneratorDoctrine 不使用 symfony 容器来实例化生成器,我最终得到一个异常 Too few arguments to function 如何在我的 id 生成器中使用 LoggerInterface?
【问题讨论】:
不幸的是,无法将 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;
}
}
【讨论】: