[英]TYPO3 Domain repository temporarily change settings
通常,如果有人想要運行函數findAll()
,他/她必須定義持久性 Pid 以讓 TYPO3 知道在哪里查找。 如果持久性 pid 不存在,則存儲庫中的函數可以解決問題。 像下面這樣:
public function initializeObject() {
$querySettings = $this->objectManager->get(Typo3QuerySettings::class);
$querySettings->setRespectStoragePage(false);
$this->setDefaultQuerySettings($querySettings);
}
但是如果我們無權訪問存儲庫會發生什么? 我的意思是存儲庫屬於另一個擴展,你不能編輯它。 解決方案是將存儲庫擴展為擴展擴展,但有時僅為此創建擴展版本太多了。
這里的問題是:
我如何暫時僅針對此請求更改存儲庫的設置,在這種情況下將setRespectStoragePage
更改為false
。
經過一些編碼,我終於想通了。
第1步。
創建一個受保護的變量,您想在其中使用存儲庫請求:
/**
* @var \TYPO3\CMS\Extbase\Persistence\Generic\QuerySettingsInterface
*/
protected $querySettings;
第2步。
在您當前的 PHP 類中注入QuerySettingsInterface
。 如果你想在你的控制器中使用它,那么你可以做這樣的事情:
public function __construct()
{
parent::__contruct();
$this->querySettings = $this->objectManager->get(QuerySettingsInterface::class);
}
除此以外
public function __construct()
{
$objectManager = GeneralUtility::makeInstance(ObjectManager::class);
$this->querySettings = $objectManager->get(QuerySettingsInterface::class);
}
第 3 步
最后,您可以設置如下設置:
$this->querySettings->setRespectStoragePage(false);
$this->contactRepository->setDefaultQuerySettings($this->querySettings);
$contacts = $this->contactRepository->findAll();
簡單且無需擴展擴展即可實現存儲庫中的功能。
此致
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.