簡體   English   中英

致命錯誤:在TYPO3中,在null上調用成員函數findAll()

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

我想獲取存儲庫的對象,但出現下一個錯誤

在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)也會發生這種情況

這些對象存在於數據庫中,在BE中可見。

我清理了緩存,刪除了typo3temp目錄的內容,並遵循了有關類似錯誤的問題(我認為),該問題是Call to a member function findAll() on a non-object ,但它不起作用,我Call to a member function findAll() on a non-object的異常是不同。

感謝您的幫助,請指導我糾正此錯誤

此錯誤幾乎總是由extbase的注釋“編譯”引起的,並且與緩存有關。 您說您清除了緩存並刪除了typo3temp的內容,但是緩存清除方法大不相同,它們不適用於每個緩存。

例如,僅使用安裝工具的“清除緩存”按鈕清除注釋緩存。 TYPO3后端頂部的工具欄圖標不會清除這些類型的緩存。

注釋高速緩存將不會存儲在typo3temp文件夾afaik中,但會在數據庫中有其自己的部分。 絕對不要通過手動刪除typo3temp文件夾內容來完成緩存清除,而總是通過安裝工具或TYPO3后端或CLI中的相應按鈕或命令來清除。

最后,有一個PHP類的自動加載緩存,安裝工具也無法清除它。 因此,如果在開發中的擴展中添加新的PHP類,則需要通過extensionmanager卸載並重新安裝擴展。 如果您使用composer安裝TYPO3實例,則它又有些不同。 在這種情況下,您可以通過鍵入命令composer dump-autoload清除composer的類加載緩存來清除composer dump-autoload加載緩存,因為TYPO3在composer模式下正在使用它。

我猜您只是沒有嘗試使用“安裝工具”按鈕來清除緩存。

如果您忘記將存儲庫注入控制器,則會發生此錯誤:

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

如果使用__construct方法,請注意不要鍵入__constract。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM