Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php TYPO3延迟加载错误_Php_Typo3_Extbase - Fatal编程技术网

Php TYPO3延迟加载错误

Php TYPO3延迟加载错误,php,typo3,extbase,Php,Typo3,Extbase,我得到了错误 参数1传递给 […]\FrontendUserRepository::findMasterByVkbur() 必须是[…]\MyModel的实例, TYPO3\CMS\Extbase\Persistence\Generic\LazyLoadingProxy的实例 给定,在第123行的[…]\MyController.php中调用 为什么这个论点仍然是一个“懒散的代理”,而不是一个“我的模型” 这是MyController.php中的第123行: $frontendUsers = $

我得到了错误

参数1传递给 […]\FrontendUserRepository::findMasterByVkbur() 必须是[…]\MyModel的实例, TYPO3\CMS\Extbase\Persistence\Generic\LazyLoadingProxy的实例 给定,在第123行的[…]\MyController.php中调用

为什么这个论点仍然是一个“懒散的代理”,而不是一个“我的模型”

这是MyController.php中的第123行:

$frontendUsers = $this->frontendUserRepository->findMasterByVkbur($this->feuser->getVkbur());
这是“vkbur”对象:

在之前“使用”对象时,例如与

\TYPO3\CMS\Core\Utility\DebugUtility::debug($this->feuser->getVkbur());
…我在第123行没有收到此错误。

如所述和

这是一个话题,但被放弃了

解决方案似乎就是你所说的:

if ($this->feuser->getVkbur() instanceof \TYPO3\CMS\Extbase\Persistence\Generic\LazyLoadingProxy) {
 $vkbur = $this->feuser->getVkbur()->_loadRealInstance();
} else {
 $vkbur = $this->feuser->getVkbur();
}
$frontendUsers = $this->frontendUserRepository->findMasterByVkbur(vkbur);

最好的解决方案似乎是在getter方法中检查变量的类型:

/**
 * @return \MyVendor\MyExt\Domain\Model\MyModel $vkbur
 */
public function getVkbur() {
    if($this->vkbur instanceof \TYPO3\CMS\Extbase\Persistence\Generic\LazyLoadingProxy) {
        $this->vkbur->_loadRealInstance();
    }
    return $this->vkbur;
}

在某些情况下,似乎仍然需要如上所示检查LazyLoadingProxy。但这不应该像这里解释的那样解决吗

我通过在getter函数“getVkbur”中使用函数“\u loadrealcinstance”找到了一个解决方法,但是Extbase应该自动完成这项工作,不是吗?Extbase不会自动完成,Fluid会。您可以访问模板中延迟加载对象的属性,Fluid将负责解析这些对象。但是如果你想在你的ControllerAction中访问它们,你必须先加载RealInstance。奇怪。当我在@rené-pflam post的答案上发布一个小编辑时,我的想法也是一样的。为什么这不是域模型getter的一部分,事实上,为什么这不是由扩展生成器构建到getter中?
/**
 * @return \MyVendor\MyExt\Domain\Model\MyModel $vkbur
 */
public function getVkbur() {
    if($this->vkbur instanceof \TYPO3\CMS\Extbase\Persistence\Generic\LazyLoadingProxy) {
        $this->vkbur->_loadRealInstance();
    }
    return $this->vkbur;
}