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();

简单且无需扩展扩展,只需在存储库中实现功能即可。

此致