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

时间:2017-08-22 22:10:59

标签: php typo3 extbase typo3-7.6.x

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

  

在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,但它没有用,我遇到的异常也不同。

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

3 个答案:

答案 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。