2012-04-06 13 views
5

バンドルに注釈リーダーを使用して、非Doctrineオブジェクトの新しいカスタム注釈を読み取ることができるかどうか知りませんか?私がこれまで見てきたことは、コントローラーのためか、Doctrineを何らかの形で拡張することです。その後、オブジェクトのsymfony2カスタム注釈

class MyTestClass { 

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

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

そして与えられたときMyTestClassのインスタンスがどの属性に適用されたアノテーション出て仕事ができることをいくつかのコードを持っている:私は行うことができるようにしたいのですがどのような

はこのようなものです。

答えて

10

Doctrineがこれをどのようにしているかを少し詳しく調べて、私はそれをどうやって行うのか分かっていると思う。だから他の誰かがこれを行う必要がある場合は、ここで私はそれをやっている方法です(フィードバックは感謝します)

私はconfig.ymlで注釈を読むために使用しているサービスがあります。 annotation_reader注釈を読み取るメソッドへのアクセスを提供するサービス。

各注釈がクラスに解決する必要があり、クラスがそう私の質問からは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 
} 

誰かに役立つことができる希望!

関連する問題