5

有谁知道是否可以让一个捆绑包使用注释阅读器来读取非 Doctrine 对象的新自定义注释?到目前为止,我所看到的一切要么用于控制器,要么以某种方式扩展 Doctrine。

我想做的是这样的:

class MyTestClass {

  /**
   * @MyBundleName\Foo
   */
  public $foo_var;

  /** 
   * @MyBundleName\Bar
   */
  public $bar_var;
}

然后有一些代码,当给定一个实例时,MyTestClass可以计算出哪个注释应用于哪个属性。

4

1 回答 1

10

对,再深入研究一下 Doctrine 是如何做到这一点的,我想我知道该怎么做。因此,如果其他人需要这样做,这就是我的做法(感谢任何反馈)

我有一个用于读取注释的服务,因此在 config.yml 中我包含了该annotation_reader服务,该服务提供对读取注释的方法的访问。

每个注释都需要解析为一个类,并且该类必须扩展基本 Doctrine 注释类,因此要从我的问题中进行 Foo 注释,您可以执行以下操作:

namespace MyBundleName

class Foo extends \Doctrine\Common\Annotations\Annotation {

}

然后您可以通过执行以下操作来阅读注释:

$class = get_class($object);
foreach(object_get_vars($object) as $fieldname => $val){

    //$this->annotationReader is an instance of the annotation_reader service
    $annotations = $this->annotationReader
                   ->getPropertyAnnotations(
                      new \ReflectionProperty($class, $fieldName)
                     );

   //$annotations will now contain an array of matched annotations, most likely just an instance of the annotation class created earlier
}

希望对其他人有用!

于 2012-04-06T18:53:04.607 回答