致命错误:在TYPO3中调用null上的成员函数findAll()

问题描述 投票:1回答:3

我想获取存储库的对象,但我有下一个错误

在null上调用成员函数findAll()

错误行是$projects = $this->projectRepository->findAll();

首先使用对象管理器来获取存储库,它不起作用。当前配置为:在Controller中

/**
 *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的问题,但它没有工作,我有的例外是不同的。

感谢您的帮助,请指导我更正此错误

php typo3 extbase typo3-7.6.x
3个回答
2
投票

此错误几乎总是由extbase的注释“编译”引起并与缓存相关。你说你清除了缓存并删除了typo3temp的内容,但是缓存清除方法非常不同,它们不适用于每个缓存。

例如,仅使用“安装工具”的“清除缓存”按钮清除注释缓存。 TYPO3后端顶部的工具栏图标不会清除这些类型的缓存。

注释缓存不会存储在typo3temp文件夹中,但在数据库中有自己的部分。不应通过手动删除typo3temp文件夹内容来完成缓存清除,而是始终通过安装工具或TYPO3后端或CLI中的相应按钮或命令。

最后,还有一个PHP类的自动加载缓存,它也不会被安装工具清除。因此,如果您在开发中向扩展中添加新的PHP类,则需要通过extensionmanager卸载并重新安装扩展。如果您使用composer来安装TYPO3实例,它又会有点不同。如果是这种情况,您可以通过输入命令composer dump-autoload来清除自动加载缓存,以清除composer的类加载缓存,因为TYPO3在编写器模式下正在使用它。

我想你只是没有尝试安装工具按钮来清除缓存。


0
投票

如果您忘记在控制器中注入存储库,则会发生此错误:

/**
 *projectRepository
 *
 * @var \VENDOR\MyExtName\Domain\Repository\ProjectRepository
 * @inject
 */
protected $projectRepository = null;

0
投票

如果使用__construct方法,请注意不要键入__construct。

© www.soinside.com 2019 - 2024. All rights reserved.