Symfony2对象的自定义注释

时间:2012-04-06 18:10:03

标签: symfony

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

我希望能做的是这样的事情:

class MyTestClass {

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

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

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

1 个答案:

答案 0 :(得分: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
}

希望对其他人有用!