Doctrine orm 什么';注释阅读器和;SimpleAnnotationReader?

Doctrine orm 什么';注释阅读器和;SimpleAnnotationReader?,doctrine-orm,Doctrine Orm,定义了两个注释读取器,它们都实现了读取器接口: Doctrine\Common\Annotations\AnnotationReader Doctrine\Common\Annotations\SimpleAnnotationReader 有人知道他们之间的区别吗 我得到的唯一提示是SimpleAnnotationReader上的docblock: 此注释读取器旨在用于您已经完成的项目中 完全控制所有可用的批注 显然,简单注释阅读器将尝试读取他将在文档块中看到的所有注释,而Annotatio

定义了两个注释读取器,它们都实现了
读取器
接口:

  • Doctrine\Common\Annotations\AnnotationReader
  • Doctrine\Common\Annotations\SimpleAnnotationReader
有人知道他们之间的区别吗

我得到的唯一提示是
SimpleAnnotationReader
上的docblock:

此注释读取器旨在用于您已经完成的项目中 完全控制所有可用的批注


显然,简单注释阅读器将尝试读取他将在文档块中看到的所有注释,而AnnotationReader可以处理要忽略的注释列表(如@param或@return).

看起来两者之间最重要的区别在条令代码中得到了解释:
SimpleNotationDriver
可以处理非导入的注释(给定默认名称空间),而
AnnotationReader
需要正确导入的注释。

  • 注释阅读器将尝试读取所有注释
您可以给它一个排除注释的列表,如
@param
@return
以忽略。这可能是一个问题,因为很难排除您不想要的任何可能的注释

  • SimpleAnnotationReader只能加载您注册到它的注释
代码示例:

AnnotationRegistry::registerAutoloadNamespace('My\Annotation', 'dir/');
$this->annotationReader = new SimpleAnnotationReader();
$this->annotationReader->addNamespace('My\Annotation');
如果文件中有任何未知的注释,我将不会得到错误

不过有一个问题:如果用户在注释名称中输入了错误,那么读者会默默地忽略它:(


来源:在开发PHP-DI时,我对两者都进行了测试。
SimpleAnnotationReader
对我来说更好,因为我希望它只读取我的
@Inject
注释。使用
AnnotationReader
时,如果文件中有任何未知注释(例如PHPUnit中的
@expectedException
),我就会出错


另请参见。

在“orm:convert-mapping--from-database annotation./src/”之后,您应该使用AnnotationReader而不是SimpleAnnotationReader。因为“orm:generate entities./src/–generate annotations=true”将抛出一个错误“无需处理的元数据类”。要处理此错误,请使用“bootstrap.php”中的“$config=Setup::createAnnotationMetadataConfiguration($path,$isDevMode,NULL,NULL,$useSimpleReader=false);”。不知道为什么会被否决,这是两个类之间的一个重要区别。永远不要链接到分支。这不是永久链接。