Fatal error: Call to a member function findAll() on null in TYPO3

Fatal error: Call to a member function findAll() on null in TYPO3

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

Call to a member function findAll() on null

错误行是$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进行了操作,但它没有用,我遇到的异常是不同的。

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

这个错误几乎都是extbase注解"compiling"引起的,跟缓存有关。你说你清除了缓存并删除了typo3temp的内容,但是清除缓存的方法非常不同,并不是对每个缓存都有效。

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

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

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

我猜您只是没有尝试使用“安装工具”按钮来清除缓存。

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

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

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