使用Doctrine 2自定义注释时,获取具有特定注释的所有实体类的数组的最佳方法是什么?

时间:2012-05-01 19:26:10

标签: annotations doctrine-orm

我正在读这个documentation article about Custom Annotations in Doctrine。我知道我可以使用$reader->getClassAnnotations($reflClass)来检索特定类的注释。获取具有特定注释的所有实体类的列表的最佳方法是什么?

1 个答案:

答案 0 :(得分: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个映射文件的约定和文件名   映射文件必须对应于完整的类名,包括   命名空间,命名空间分隔符'\',由点'。'。

替换

您也可以使用而不是PhpDriver,DatabaseDriver(Doctrine \ ORM \ Mapping \ Driver \ DatabaseDriver.php)。