0

私は最初の Doctrine 2.0 プロジェクトでエンティティをロードするのにかなりの時間を費やしてきました。私のエンティティクラスをロードすることを除いて、すべてが正常に動作します(ロードする他のクラスを取得し、DBALを介したデータベースとの接続が成功しました)。

必要な情報をお伝えします。

  • tarball メソッドで Doctrine をインストールしました
  • 私のフォルダの構造はこのようなものです

    public_html
      -> docrine test
         -> entities
            -> User.php
            -> Video.php
    
  • ロードしようとしているブートストラップファイルで

    <?php
    $sRoot = "/home/..../public_html/doctrinetest";
    $classLoader = new \Doctrine\Common\ClassLoader('doctrinetest\entities', $sRoot.'/doctrinetest/entities');
    $classLoader->register(); // register on SPL autoload stack
    
  • 名前空間として、クラスに逆らう前に次の行を入れます

    namespace doctrinetest\entities;
    
  • 次に、コマンドを実行してスキームを生成しようとすると

    $tool = new \Doctrine\ORM\Tools\SchemaTool($em);
    $classes = array(
      $em->getClassMetadata('Video'),
      $em->getClassMetadata('User')
    );
    $tool->createSchema($classes);
    
  • エラーが発生します

    Warning: class_parents() [function.class-parents]: 
    Class Video does not exist and could not be loaded in
    /home/..../public_html/doctrine2-tarball/Doctrine/Common/Persistence/Mapping/RuntimeReflectionService.php on line 40
    

これについて私を助けてください、ありがとう、Pj

4

1 に答える 1

0

まず、\ Doctrine \ Common\ClassLoaderは'includePath/namespace/'ディレクトリでクラスを検索します。

<?php
$sRoot = "/home/..../public_html/doctrinetest";
$classLoader = new \Doctrine\Common\ClassLoader('doctrinetest\entities', $sRoot.'/doctrinetest/entities');
$classLoader->register();
?>

上記のコードは、'/ home/..../public_html/doctrinetest/doctrinetest/entities/doctrinetest/entities/'ディレクトリでクラスを見つけようとします。もちろん、クラスが見つかりません。

次に、EntityManagerのgetClassMetadata関数は、引数の名前空間を含むclassNameを必要とします。

したがって、このように使用してください。

$em->getClassMetadata('\\doctrinetest\\entities\\Video');
于 2013-02-22T05:23:02.040 に答える