2012-04-06 27 views
5

¿Alguien sabe si es posible usar un paquete con el lector de anotaciones para leer nuevas anotaciones personalizadas para objetos que no sean de Doctrine? Todo lo que he visto hasta ahora es para un controlador o para ampliar Doctrine de alguna manera.Anotaciones personalizadas de Symfony2 para los objetos

Lo que me gustaría ser capaz de hacer es algo como esto:

class MyTestClass { 

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

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

Y luego tener un código que cuando se le da una instancia de MyTestClass podría averiguar qué anotación aplicada a qué atributo.

Respuesta

10

Correcto, profundice un poco más en cómo Doctrine hace esto y creo que sé cómo hacerlo. Entonces, si alguien más necesita hacer esto, así es como lo estoy haciendo (agradecería cualquier comentario)

Tengo un servicio que estoy usando para leer las anotaciones así que en config.yml He incluido el annotation_reader servicio que proporciona acceso a los métodos para leer sus anotaciones.

Cada anotación tiene que resolver de una clase y la clase debe extender la clase de anotación Doctrina de base, por lo que hacer la anotación de Foo mi pregunta que haría algo como:

namespace MyBundleName 

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

} 

continuación, puede leer las anotaciones haciendo:

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

¡Espero que pueda ser de utilidad para otra persona!

Cuestiones relacionadas