我想获取存储库的对象,但我有下一个错误
在null
上调用成员函数findAll()
错误行为$projects = $this->projectRepository->findAll();
首先使用对象管理器来获取存储库,它不起作用。目前的配置是: 在控制器
/**
*projectRepository
*
* @var \VENDOR\MyExtName\Domain\Repository\ProjectRepository
* @inject
*/
protected $projectRepository = null;
和存储库
class ProjectRepository extends \TYPO3\CMS\Extbase\Persistence\Repository
{
public function createQuery() {
$query = parent::createQuery();
$query->getQuerySettings()->setRespectStoragePage(FALSE);
return $query;
}
}
findByUid($uid)
对象存在于DB中,在BE中可见。
我清理了缓存,删除了typo3temp目录的内容,并按照有关类似错误的问题(我认为)Call to a member function findAll() on a non-object
,但它没有用,我遇到的异常也不同。
感谢您的帮助,请指导我更正此错误
答案 0 :(得分:2)
此错误几乎总是由注释"编译"的extbase和缓存相关。您说清除了缓存并删除了typo3temp的内容,但缓存清除方法非常不同,并且它们不适用于每个缓存。
例如,只能使用“安装工具”的“清除缓存”按钮清除注释缓存。 TYPO3后端顶部的工具栏图标不会清除这些类型的缓存。
注释缓存不会存储在typo3temp文件夹中,但在数据库中有自己的部分。不应通过手动删除typo3temp文件夹内容来完成缓存清除,而是始终通过安装工具或TYPO3后端或CLI中的相应按钮或命令。
最后,还有一个PHP类的自动加载缓存,它也不会被安装工具清除。因此,如果您在开发中向扩展中添加新的PHP类,则需要通过extensionmanager卸载并重新安装扩展。如果您使用composer来安装TYPO3实例,它又会有点不同。如果是这种情况,您可以通过输入命令composer dump-autoload
来清除自动加载缓存,以清除作曲家的类加载缓存,因为TYPO3在编写器模式下正在使用它。
我猜你只是没有尝试安装工具按钮来清除缓存。
答案 1 :(得分:0)
如果您忘记在控制器中注入存储库,则会发生此错误:
/**
*projectRepository
*
* @var \VENDOR\MyExtName\Domain\Repository\ProjectRepository
* @inject
*/
protected $projectRepository = null;
答案 2 :(得分:0)
如果使用__construct方法,请注意不要键入__constract。