使用Symfony4阅读注释

时间:2018-07-20 16:29:39

标签: php annotations symfony4

我正在尝试使用Symfony4读取批注,但看起来有些问题!

我要阅读的课程:

<?php

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;

/**
 * @ORM\Entity(repositoryClass="App\Repository\OAuthClientRepository")
 */
class OAuthClient {
{

    /**
     * @Assert\NotBlank()
     * @ORM\Column(type="string")
     */
    protected $name;

}

我用来阅读注释的代码:

<?php

namespace App\Test;

use Doctrine\Common\Annotations\SimpleAnnotationReader as DocReader;

/**
 * Helper AnnotationReader
 */
class AnnotationReader
{

    /**
     * @param $class
     * @return null|\StdClass
     */
    public static function getClass($class)
    {
        $reader = new DocReader;
        $reflector = new \ReflectionClass($class);
        return $reader->getClassAnnotations($reflector);
    }

    /**
     * @param $class
     * @param $property
     * @return array
     */
    public static function getProperty($class, $property)
    {
        $reader = new DocReader;
        $reflector = new \ReflectionProperty($class, $property);
        return $reader->getPropertyAnnotations($reflector);
    }

    /**
     * @param $class
     * @param $method
     * @return array
     */
    public static function getMethod($class, $method)
    {
        $reader = new DocReader;
        $reflector = new \ReflectionMethod($class, $method);
        return $reader->getMethodAnnotations($reflector);
    }

}

我打电话时得到的是空数组

App\Test\AnnotationReader::getClass(App\Entity\OAuthClient::class);
App\Test\AnnotationReader::getProperty(App\Entity\OAuthClient::class, 'name');

我在做什么错? 读取批注的最佳方法是什么?

我希望阅读用于类属性的验证。

谢谢您的帮助!

2 个答案:

答案 0 :(得分:0)

您可能必须在addNamespace()实例上调用SimpleAnnotationReader方法。

例如,对于ORM注释:

$reader->addNamespace('Doctrine\ORM\Mapping');

对于验证注释:

$reader->addNamespace('Symfony\Component\Validator\Constraints');

请参阅:

答案 1 :(得分:0)

更改

use Doctrine\Common\Annotations\SimpleAnnotationReader as DocReader;

use Doctrine\Common\Annotations\AnnotationReader as DocReader;

而且有效