TYPO3 域存储库临时更改设置
TYPO3 Domain repository temporarily change settings
通常如果有人想要 运行 函数 findAll()
,he/she 必须定义持久性 Pid 让 TYPO3 知道去哪里找。如果持久性 pid 不存在,则存储库中的函数可以解决问题。像下面这样:
public function initializeObject() {
$querySettings = $this->objectManager->get(Typo3QuerySettings::class);
$querySettings->setRespectStoragePage(false);
$this->setDefaultQuerySettings($querySettings);
}
但是如果我们无权访问存储库会怎样?我的意思是存储库属于另一个扩展,你不能编辑它。解决方案是将存储库扩展到 extend 扩展名,但有时这对于创建扩展版本来说太多了。
这里的问题是:
我如何临时更改存储库的设置,在这种情况下,将 setRespectStoragePage
更改为 false
。
经过一些编码我终于弄明白了。
步骤 1.
在您想使用存储库请求的地方创建一个受保护的变量:
/**
* @var \TYPO3\CMS\Extbase\Persistence\Generic\QuerySettingsInterface
*/
protected $querySettings;
步骤 2.
在你当前的 PHP class 中注入 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();
简单且无需扩展扩展,只需在存储库中实现功能即可。
此致
通常如果有人想要 运行 函数 findAll()
,he/she 必须定义持久性 Pid 让 TYPO3 知道去哪里找。如果持久性 pid 不存在,则存储库中的函数可以解决问题。像下面这样:
public function initializeObject() {
$querySettings = $this->objectManager->get(Typo3QuerySettings::class);
$querySettings->setRespectStoragePage(false);
$this->setDefaultQuerySettings($querySettings);
}
但是如果我们无权访问存储库会怎样?我的意思是存储库属于另一个扩展,你不能编辑它。解决方案是将存储库扩展到 extend 扩展名,但有时这对于创建扩展版本来说太多了。
这里的问题是:
我如何临时更改存储库的设置,在这种情况下,将 setRespectStoragePage
更改为 false
。
经过一些编码我终于弄明白了。
步骤 1.
在您想使用存储库请求的地方创建一个受保护的变量:
/**
* @var \TYPO3\CMS\Extbase\Persistence\Generic\QuerySettingsInterface
*/
protected $querySettings;
步骤 2.
在你当前的 PHP class 中注入 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();
简单且无需扩展扩展,只需在存储库中实现功能即可。
此致