1

我正在阅读有关 Doctrine 中的自定义注释的文档文章。我知道我可以用它$reader->getClassAnnotations($reflClass)来检索特定类的注释。获取具有特定注释的所有实体类的列表的最佳方法是什么?

4

1 回答 1

2
$driver = new \Doctrine\ORM\Mapping\Driver\PHPDriver($entities_path );

$classes = $driver->getAllClassNames();

foreach ($classes as $key => $class) {     

      $reader = new \Doctrine\Common\Annotations\AnnotationReader();

      $annotationReader = new \Doctrine\Common\Annotations\CachedReader(
                                              $reader, 
                                              new \Doctrine\Common\Cache\ArrayCache()
                                           );

      $reflClass = new ReflectionClass("\Entities\\".$reportableClass);
      $annotation = $annotationReader->getClassAnnotation(
                                                     $reflClass, 
                                                     'Custom_Annotation'
                                                  );
      if (is_null($annotation)) {
          unset($classes[$key]);
      }
}

Doctrine 的 AbstractFileDriver(Doctrine\ORM\Mapping\Driver\AbstractFileDriver.php) 文档说:

基于文件的元数据驱动程序的基本驱动程序。

文件驱动程序以按需加载各个类的映射文件的模式运行。这要求用户遵守每个类 1 个映射文件的约定,并且映射文件的文件名必须对应于完整的类名,包括命名空间,命名空间分隔符为“\”,替换为点“.”。

您也可以使用 DatabaseDriver (Doctrine\ORM\Mapping\Driver\DatabaseDriver.php) 来代替 PhpDriver。

于 2012-06-26T18:56:09.847 回答