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