目标实体 = ZF2 中的类重新声明错误 = "Y"



我目前在代码库中遇到一个奇怪的错误。您可以在我的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 KennzahlenEntityReferenzwert (Entity_Y)
in moduleKennzahlensrcKennzahlenEntityReferenzwert.php 
on line 13

首先用StandardAutoloader加载Entity_X也不会出现任何问题。

更新

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

我正在编写一个失败的测试用例,试图在条令/公共中解决这个问题。问题似乎是无声自动加载器(如@Xerkus所解释的)与条令/通用本身不兼容。要解决此问题,请使用ZF2(或composer)中的StandardAutoloader,而不是使用ClassMapAutoloader。这将解决问题,直到补丁准备就绪。

更新:条令/通用#216 建议使用补丁

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

为了检查我是否正确,在你的项目中,在条令中替换Doctrine/Common/ClassLoader.php中的第224行

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

带有

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

Ans看看问题是否得到了解决,如果我是正确的,然后向条令项目报告错误

相关内容

  • 没有找到相关文章