【问题标题】:TYPO3 Domain repository temporarily change settingsTYPO3 域存储库临时更改设置
【发布时间】:2020-03-09 07:08:08
【问题描述】:

通常如果有人想要运行函数findAll(),他/她必须定义持久性 Pid 以让 TYPO3 知道在哪里查找。如果持久性 pid 不存在,则存储库中的函数可以解决问题。像下面这样:

 public function initializeObject() {
    $querySettings = $this->objectManager->get(Typo3QuerySettings::class);
    $querySettings->setRespectStoragePage(false);
    $this->setDefaultQuerySettings($querySettings);
 }

但是如果我们无法访问存储库会发生什么?我的意思是存储库属于另一个扩展,你不能编辑它。解决方案是将存储库扩展为 extend 扩展,但这有时对于仅为此创建扩展版本来说太过分了。

这里的问题是:

我如何临时,仅针对这个请求,更改存储库的设置,在这种情况下将setRespectStoragePage 更改为false

【问题讨论】:

    标签: typo3 repository settings findall domain-model


    【解决方案1】:

    经过一些编码,我终于弄明白了。

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

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

    最好的问候

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 2023-01-30
      • 2018-09-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多