symfony - 将属性传递给 Doctrine AbstractIdGenerator
问题描述
我需要将 LoggerInterface 传递给@ORM\CustomIdGenerator(class=MyGenerator::class)中使用的MyGenerator
Doctrine 不使用 symfony 容器来实例化生成器,我最终得到一个 Exception Too little 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;
}
}
推荐阅读
- scala - 增量表插入无法正常工作,使用 - org.apache.spark.sql.AnalysisException 读取错误:表不支持读取
- mysql - 如何使用动态 SQL (MySQL) 将查询结果存储到局部变量中?
- python - 为什么我的 API 模拟补丁不适用于 Python?
- angular - Angular slickgrid 多选编辑器字段需要在按下确定按钮时移除焦点而不更改数据
- python - python请求:为每个请求全局添加http标头
- javascript - 如何在具有嵌套值的交叉过滤器组中使用 .top() 方法
- javascript - 为什么我的 Bootstrap 数据表列标题排序图标不显示?
- spring-boot - 当第一个等待重试时,如何在发起新的响应调用之前取消 WebClient 响应调用
- c# - 比较 2 个相同类型的列表并删除重复项
- generics - 如何将选项传递给可以在 Deserialize::deserialize() 中访问的 Rust serde?