【发布时间】:2021-10-26 10:24:38
【问题描述】:
使用 Symfony 5.3 我想找到项目中所有使用自定义注释 @MyAnnotation 的类。
虽然我找到了无数教程和大量关于注解的信息,但它们都仅展示了如何检查给定对象或方法是否使用了某些注解。例如使用内核事件订阅者来测试当前控制器是否使用注解是没有问题的。
但我无法找到一种方法来自动查找/发现所有使用给定注释的类。我假设 Doctrine 本身在查找所有使用其 @Entity 注释的实体方面也是如此。 但是这是怎么做到的呢?
我试图检查 Doctrine 代码以了解 hit 是如何工作的,但我没有发现。
是否有一些内置功能?或者是否有一些giveMeAllClassesInProject() 方法可以用来手动测试每个类?
遍历项目中的所有类是不切实际的。我不必主动告诉 Doctrine MyBundle 已安装在项目中,并且它可以在 /vendor/me/my-bundle/src/Entity 找到它的实体,但 Doctrine 确实找到了这些实体。
当然src/Entity/ 部分是标准的,并且很肯定属于Doctrine 默认配置,但是Doctrine 仍然需要知道安装了哪些包,在哪里可以找到它们,在哪里可以找到项目src/ 目录等。所以这个方向需要有一些giveMeAlleSrcDirsInProject()方法或者什么的,不是吗?
此外,即使 Symfony 将提供所有 src/ 目录,遍历它们并检查所有实体类以在每个请求上查找某些注释也是非常低效的。所以这些信息肯定会以某种方式被缓存。但是什么时候收集这些信息等等。
简而言之: 有没有关于如何实现@Entity 等注解的标准程序?
【问题讨论】:
-
“但是这是怎么做到的呢?” Doctrine 知道在哪里搜索实体,在配置文件中定义
-
你想要的不存在。您需要遍历目录。您可以尝试依赖执行类似操作的其他系统,但由于他们会在不同的地方寻找不同的配置,因此他们可能找不到您想要的所有内容。
-
没有,也不可能有任何
giveMeAlleSrcDirsInProject()。
标签: symfony annotations doctrine