Doctrine 2 Classloader奇怪的行为 - 类的错误路径

时间:2010-09-06 20:54:08

标签: php orm classloader doctrine doctrine-orm

我在Doctrine 2项目中添加了Classloader时遇到了一些问题。 我有这样简单的目录结构:

  • config(bootstrap文件)
  • html(docroot with templates / images / js etc)
  • PHP
  • 实体(学说2实体)
  • 回应(某些传输对象)
  • 服务(处理api和业务逻辑 - 就像java中的会话bean)

每个php子目录都属于自己的命名空间(与目录名称相同) 我想使用上面提到的类加载器来加载这三个不同的包,所以我的引导程序看起来像这样:

$classLoader = new \Doctrine\Common\ClassLoader('Doctrine', $lib );
$classLoader->register();

$responsesCL = new \Doctrine\Common\ClassLoader('Responses', __DIR__.'/../php');
$responsesCL->register();

$entitiesCL = new \Doctrine\Common\ClassLoader('Entities', __DIR__.'/../php');
$entitiesCL->register();

$servicesCL = new \Doctrine\Common\ClassLoader('Services', __DIR__.'/../php');
$servicesCL->register();

粗体DIR实际上是__ DIR __ php常量。

现在,我在我的服务包中引用实体,这就是问题开始的地方,由于某些原因我因文件未找到问题而得到错误,例如:

  

需要打开失败   '/var/www/projects/PlatformManagement/config/../php/Services/Entities/User.php'   (include_path中= ':在/ usr /共享/梨:在/ usr /共享/ PHP')   在    /usr/share/pear/Doctrine/Common/ClassLoader.php 的   在线 148

不知何故,路径中还有额外的“服务”,显然它不是有效路径。我有点疑惑为什么那个额外的目录呢?我试图检查所有命名空间,调用,它们都没问题。

我需要另外一双眼睛看,我假设我在这里遗漏了一些明显的东西,但无法发现它:|

哦,这是关于fedora的最新Doctrine 2 Beta(4)和php 5.3.3,如果有任何帮助的话。

谢谢, 格雷格

1 个答案:

答案 0 :(得分:0)

是否有类似Doctrine \ ORM \ Tools \ Setup :: registerAutoloadPEAR()的内容?

Doctrine的Autoloader可能会产生意外行为,因为它会根据PHP包含路径加载类。

参考this

在您的情况下,实体应该

namespace Entities;

声明,而不是其他任何内容。

并使用下面的实体,

use Entities\User;
new User;