1

我目前在我的代码库中面临一个奇怪的错误。你可以在我的 github上看到完整的 ZF2s 项目代码。<-有一个链接

我正在设置一个包含两个实体(X 和 Y)的模块。Entity_X 包含通过 (targetEntity="Entity_Y") 对 Entity_Y 的引用。错误持续存在于 FQCN 或仅 CN 本身。

Entity_X:
  id int PK,
  id_Y int FK,
  text varchar

Entity_Y:
  id int PK,
  text varchar

首先加载 Entity_Y 然后加载 Entity_X 一切正常。这对于 StandardAutoloader 和 ClassMapAutoloader 都是如此。但是:在 ClassMapAutoloader 存在的情况下首先加载 Entity_X 时,我将看到以下错误:

Fatal error: Cannot redeclare class Kennzahlen\Entity\Referenzwert (Entity_Y)
in \module\Kennzahlen\src\Kennzahlen\Entity\Referenzwert.php 
on line 13

首先使用 StandardAutoloader 加载 Entity_X 也没有任何问题。

更新

问题似乎在 ZF2s ClassMapAutoloader(或一般的自动加载机制)中。我的模块使用了 ClassMapAutoloader 并使用它我得到了上述错误。当删除 ClassMapAutoloader 并简单地使用 StandardAutoloader 时,错误消失得无影无踪。感谢@ocramius 和所有其他我为此烦恼的人:)

4

2 回答 2

4

我正在编写一个失败的测试用例来尝试在教义/通用中解决这个问题。问题似乎是静默自动加载器(如@Xerkus 所解释)与学说/通用本身不兼容。要解决这个问题,请使用StandardAutoloaderZF2(或 composer)中的 a 而不是使用ClassMapAutoloader. 这将解决问题,直到补丁准备好。

更新:在教义/common#216建议使用补丁

于 2012-11-15T14:12:28.063 回答
2

我对学说一无所知,但我浏览了源代码,我想我发现了问题:
https
://github.com/doctrine/common/blob/master/lib/Doctrine/Common/ClassLoader.php#L224 在这里,这段代码期望自动加载器将返回值评估为真,但这不是 spl 自动加载机制的要求,因此自动加载器可以返回 NULL,

要检查我是否正确,请在您的项目中的学说中替换第 224 行Doctrine/Common/ClassLoader.php

} else if ($loader[0]->{$loader[1]}($className)) {

} else if ($loader[0]->{$loader[1]}($className) && class_exists($className, false)) {

回答看看问题是否已解决,如果我是正确的 - 然后将错误报告给学说项目

于 2012-11-15T13:35:57.863 回答