TYPO3延迟加载错误

时间:2016-12-09 10:59:17

标签: php typo3 extbase

我收到错误

  

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

为什么参数仍然是“LazyLoadingProxy”而不是“MyModel”?

这是MyController.php中的第123行:

b

这是“vkbur”对象:

$frontendUsers = $this->frontendUserRepository->findMasterByVkbur($this->feuser->getVkbur());

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

/**
 * @var \MyVendor\MyExt\Domain\Model\MyModel
 * @lazy
 */
protected $vkbur = null;

...我在第123行没有收到此错误。

3 个答案:

答案 0 :(得分:4)

如上所述herehere

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

解决方案似乎就是您所评论的内容:

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);

答案 1 :(得分:2)

最佳解决方案似乎是在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;
}

答案 2 :(得分:0)

在某些情况下,仍需要如上所述检查LazyLoadingProxy。但是不应该像这里解释的那样解决吗? https://wiki.typo3.org/Enhanced_Lazy_Loading