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 回答