2012-04-06 16 views
5

क्या किसी को पता है कि बंडल एनओक्ट्रिन ऑब्जेक्ट्स के लिए नए कस्टम एनोटेशन पढ़ने के लिए एनोटेशन रीडर का उपयोग करना संभव है? मैंने जो कुछ भी देखा है वह या तो नियंत्रक के लिए है या किसी भी तरह से सिद्धांत का विस्तार करना है।ऑब्जेक्ट्स के लिए सिम्फनी 2 कस्टम एनोटेशन

मैं ऐसा करने में सक्षम होने के लिए क्या करना चाहते हैं कुछ इस तरह है:

class MyTestClass { 

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

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

और फिर कुछ कोड है कि जब दिया MyTestClass का एक उदाहरण है जो एनोटेशन जो विशेषता के लिए आवेदन किया बाहर काम कर सकता है।

उत्तर

10

सही, थोड़ा और अधिक खुदाई करता है कि सिद्धांत कैसे करता है और मुझे लगता है कि मुझे यह पता है कि यह कैसे करना है। तो अगर किसी और को यह करने की ज़रूरत है तो मैं यह कैसे कर रहा हूं (किसी भी प्रतिक्रिया की सराहना करता हूं)

मेरे पास एक ऐसी सेवा है जिसका उपयोग मैं एनोटेशन को पढ़ने के लिए कर रहा हूं ताकि config.yml में मैंने शामिल किया हो annotation_reader सेवा जो आपकी एनोटेशन पढ़ने के तरीकों तक पहुंच प्रदान करती है।

प्रत्येक एनोटेशन एक वर्ग को हल करने की जरूरत है और वर्ग के आधार सिद्धांत एनोटेशन वर्ग का विस्तार करना होगा, ताकि मेरे सवाल से फू एनोटेशन आप की तरह कुछ करना चाहते हैं क्या करने के लिए:

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 
} 

आशा है कि किसी और के लिए उपयोग किया जा सकता है!

संबंधित मुद्दे