如何在Symfony中解析phpdoc属性类型?

时间:2015-12-17 16:16:13

标签: php symfony

我可以使用类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类呢?有更优雅的方式吗?

2 个答案:

答案 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}}