2012-04-06 20 views
5

Czy ktoś wie, czy możliwe jest skorzystanie z pakietu przy użyciu czytnika opisów w celu odczytania nowych niestandardowych adnotacji dla obiektów innych niż doktryna? Wszystko, co do tej pory widziałem, jest albo dla kontrolera, albo dla rozszerzenia Doctrine w jakiś sposób.Adnotacje niestandardowe dla obiektów Symfony2

Co chciałbym być w stanie zrobić coś takiego:

class MyTestClass { 

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

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

A potem jakiś kod, który po podaniu instancją MyTestClass mógł pracować z których zastosowano adnotacji do którego atrybut.

Odpowiedz

10

Dobrze, trochę bardziej wnikam w to, jak Doctrine to robi i myślę, że wiem, jak to zrobić. Więc jeśli ktoś musi to zrobić, to jak to robię (doceniłbym każdą opinię).

Mam usługę, której używam do czytania adnotacji, więc w config.yml. Usługa annotation_reader zapewnia dostęp do metod czytania adnotacji.

Każda adnotacja musi rozwiązać do klasy i klasy musi rozszerzać klasę adnotacji podstawa doktryny tak zrobić adnotację Foo z moim pytaniem chcesz zrobić coś takiego:

namespace MyBundleName 

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

} 

Następnie można odczytać adnotacje:

$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 
} 

Mam nadzieję, że może być użyteczny dla kogoś innego!

Powiązane problemy