1

Doctrine Common を使用して独自の注釈を作成しようとしています。http://docs.doctrine-project.org/projects/doctrine-common/en/latest/reference/annotations.htmlhttps://github.com/doctrine/commonと. Call to undefined method Doctrine\\Common\\Annotations\\AnnotationReader::setDefaultAnnotationNamespace_ PHP Fatal error: Call to undefined method Doctrine\\Common\\Annotations\\AnnotationRegistry::registerAnnotationNamespaceソースを確認しましたが、それらはありません。git log によると、それらは 1 年前に削除されました。

PSR-0 オートローダを (Symfony から) 使用しています。だから私はPSR-0ローダーが期待するファイルを持っています:

namespace My\Test;

/**
 * @Annotation
 */
class Foo {

}

別のクラス

namespace My\Annotated

/**
 * @My\Test\Foo
 */
class Test {
}

読者:

namespace My\Reader

use ReflectionClass;
use Doctrine\Common\Annotations\AnnotationReader;
use Doctrine\Common\Annotations\AnnotationRegistry;
use My\Test\Foo;

$reader = new AnnotationReader();
$reflectionClass = new ReflectionClass('My\\Annotated\\Test');
$classAnnotations = $reader->getClassAnnotations($reflectionClass);
var_dump($classAnnotations);

Gets:"[Semantical Error] The annotation "@My\\Test\\Foo" in class My\\Annotated\\test was never imported. Did you maybe forget to add a "use" statement for this annotation?"私はおそらくそうしましたが、私の人生では、どこに追加すればよいかわかりません. そして、可能であれば @Foo だけを使いたいと思っています。

4

2 に答える 2

1

AnnotationRegistry::registerAutoloadNamespaceオートローディングは、PSR-0 オートローダーによって処理されるようです。ドキュメント/ソース.

use My\Test\Foo注釈として使用するために、注釈付きファイルでa を実行できることがわかりました@Foo。これが可能な理由は、Doctrineがステートメントのみのためにファイルを再解析するためです。use

于 2012-06-13T22:48:03.193 に答える