2012-04-24 9 views
0

私は最初のDoctrine 2.0プロジェクトにエンティティをロードするのにかなり時間をかけてきました。私のエンティティクラスの読み込みを除いて、すべてうまく動作します(ロードする他のクラスを取得し、DBALとの接続は成功します)。Doctrine 2.0:エンティティのためにクラスローダーを取得する

必要な情報をお知らせします。私は

<?php 
$sRoot = "/home/..../public_html/doctrinetest"; 
$classLoader = new \Doctrine\Common\ClassLoader('doctrinetest\entities', $sRoot.'/doctrinetest/entities'); 
$classLoader->register(); // register on SPL autoload stack 
でそれをロードしようとしている私のブートストラップファイルでこの

public_html 
    -> docrine test 
    -> entities 
     -> User.php 
     -> Video.php 
  • のようなものです私はDoctrineはtarballの方法

  • 私のフォルダの構造を谷インストール

    • 名前空間として、私はクラスを無視する前に次の行を入れます

      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 
      

    はこの1つの おかげで私を助けてください取得、 Pj

  • +0

    名前空間も追加する必要があると思いますので、 '$ em-> getClassMetadata( 'doctrinetest \ entities \ Video')' –

    答えて

    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/」ディレクトリにクラスを探してみてください。 もちろん、クラスが見つかりません。

    第2に、EntityManagerのgetClassMetadataファンクションは、引数としてネームスペースを含むクラス名を必要とします。

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

    $em->getClassMetadata('\\doctrinetest\\entities\\Video'); 
    
    関連する問題