6

Doctrine ORM を初めて使用しようとしています。ここにある構成に従っています。

これらの手順を直接実行すると、次のエラーが発生します。

警告: class_parents() [function.class-parents]: クラス MyProject\Model\User が存在せず、 222 行目の/opt/local/lib/php/Doctrine/ORM/Mapping/ClassMetadataFactory.phpにロードできませんでした

警告: array_reverse() は、パラメーター 1 が配列であると想定 します。222 行目の/opt/local/lib/php/Doctrine/ORM/Mapping/ClassMetadataFactory.phpで指定されたブール値です。

警告: /opt/local/lib/php/Doctrine/ORM/Mapping/ClassMetadataFactory.phpの222 行目 の foreach() に無効な引数が指定されまし た

致命的なエラー: /opt/local/lib/php/Doctrine/ORM/Mapping/ClassMetadata.php:67 にメッセージ「Class MyProject\Model\User does not exist」を含むキャッチされない例外「ReflectionException」

スタックトレース:

#0 /opt/local/lib/php/Doctrine/ORM/Mapping/ClassMetadata.php(67): ReflectionClass->__construct('MyProject\Model...')

#1 /opt/local/lib/php/Doctrine/ORM/Mapping/ClassMetadataFactory.php(350): Doctrine\ORM\Mapping\ClassMetadata->__construct('MyProject\Model...')

#2 /opt/local/lib/php/Doctrine/ORM/Mapping/ClassMetadataFactory.php(260): Doctrine\ORM\Mapping\ClassMetadataFactory->newClassMetadataInstance('MyProject\Model...')

#3 /opt/local/lib/php/Doctrine/ORM/Mapping/ClassMetadataFactory.php(169): Doctrine\ORM\Mapping\ClassMetadataFactory->loadMetadata('MyProject\Model...')

#4 /opt/local/lib/php/Doctrine/ORM/EntityManager.php(247): Doctrine\ORM\Mapping\ClassMetadataFactory->getMetadataFor('MyProject\Model...')

#5 /opt/local/lib/php/Doctrine/ORM/EntityManager.php(563): Doctrine\ORM\EntityManager->getClassMetadata('MyProject\Model...')

#6 /opt /opt/local/lib/php/Doctrine/ORM/Mapping/ClassMetadata.phpの67 行目

このエラーは解消され、サンプル コードに次の行を追加すると、コードは完全に機能します (以下のコメントで示されます)。

$driverImpl = $config->newDefaultAnnotationDriver('/path/to/lib/MyProject/Entities');
$driverImpl->getAllClassNames();  // **MY ADDED LINE**
$config->setMetadataDriverImpl($driverImpl);

サンプル コードを動作させるためにこの呼び出しが必要であることに言及するものは何もありません。エラーが発生している場所を確認しようとしているときに、画面に情報をエコーし​​ているときに偶然出くわしただけです。

この呼び出しが必要な理由 (およびサンプル コードで言及されていない理由) はありますか? 元のエラーの根本原因である代わりに呼び出す必要があるものは他にありますか?

(必要に応じてより多くのコードを投稿できます。Doctrine を使用するのは初めてなので、これを解決するのに何が最も役立つかはわかりません。)

編集:エラーが実際に発生する行について言及するのを怠りました:

$user = $em->find('MyProject\Model\User', 1);
4

2 に答える 2

7

プロジェクト用にクラスローダーが正しく設定されていないようです:

$classloader = new \Doctrine\Common\ClassLoader('MyProject', '/path/to/lib/');
$classloader->register();

getAllClassNames() を呼び出すと問題が解決する理由は、 /path/to/lib/MyProject/Entities 内のすべてのディレクトリとファイルをトラバースしてそれらを含めるためです。明らかにこれは遅く、お勧めできません。

于 2010-12-27T16:24:27.433 に答える
0

また、名前空間なしでエンティティをロードすることはできません。これらのクラスは自動ロードされません。

于 2011-04-07T10:20:00.480 に答える