我可以使用类Doctrine\Common\Annotations\AnnotationReader
在Symfony中阅读自定义注释。
看起来如下。我描述了财产:
/**
* @var array
* @MappingClient(ignore=true)
*/
protected static $myProperty = [];
我可以解析注释@MappingClient
:
$class = new \ReflectionClass(get_called_class());
$property = $class->getProperty('myProperty');
$annotationReader = new AnnotationReader();
$mappingClient = $annotationReader
->getPropertyAnnotation($property, 'MyClass\Annotation\MappingClient');
我还需要解析@var array
中描述的属性类型。我理解我可以用$property->getDocComment()
上的正则表达式解析它。但是,如果getPropertyAnnotation()
忽略@var
和其他标准声明,我怎么能只使用Symfony类呢?有更优雅的方式吗?
答案 0 :(得分:1)
如果您使用Symfony 2.8或Symfony 3,则可以使用the PropertyInfo component。它正是如此。
在控制器中:
$this->get('property_info')->getTypes('FooClass', 'foo'); // Must be enabled in the framework configuration
// array(1) {
// [0] =>
// class Symfony\Component\PropertyInfo\Type#36 (6) {
// private $builtinType => string(6) "object"
// private $nullable => bool(false)
// private $class => string(8) "DateTime"
// private $collection => bool(false)
// private $collectionKeyType => NULL
// private $collectionValueType => NULL
// }
// }
答案 1 :(得分:0)
我在AnnotationReader上解决了这个问题:
$annotationReader = new UniversalAnnotationReader();
$class = new \ReflectionClass(get_called_class());
$type = $annotationReader->getPropertyType($class->getProperty('myProperty'));
我是如何使用它的:
{{1}}