Typo3:以隐藏记录为参数的控制器动作

问题描述

我目前正在尝试在 Typo3 v10 中使用一个扩展程序,它使用户能够显示、编辑、更新、禁用和启用其他用户帐户。

不幸的是,我遇到了无法使用残疾用户作为操作参数的问题:

/**
 * Save user changes
 *
 * @param \Company\MyExtension\Domain\FeUser $feuser
 * @return void
 */
public function updateAction(\Company\MyExtension\Domain\FeUser $feuser): void {}

它会导致以下错误Object of type \Company\MyExtension\Domain\FeUser with identity "3" not found.

据我所知,extbase 不依赖存储库的查询设置来创建对象,而是使用 PersistenceManager::createqueryForType 通过 QueryFactory::create 获取查询设置。此问题也在 few bug reports 中列出。

关于如何使用自定义 QueryFactory 为我的扩展程序设置不同的认 QuerySettings 有 a suggestions,但是这似乎不再适用于 Typo3 v10,至少我的自定义 QueryFactory 在注册后没有被使用它...另外,如果这行得通,它会不会对通过控制器操作实例化的所有对象使用新的 QueryFactory 而不仅仅是这个扩展?

如何使用 Typo3 v10.4 正确处理隐藏用户我的扩展程序?

附言Another suggestion 是通过 initializeAction 尽早获取对象,但这仅适用于未修改的模型而不是为对象设置新值时,因为它最终只会加载数据库值...

解决方法

在此处查看扩展程序“新闻”的处理方式:

        if ($news === null || $this->settings['isShortcut']) {
            $previewNewsId = ((int)$this->settings['singleNews'] > 0) ? $this->settings['singleNews'] : 0;
            if ($this->request->hasArgument('news_preview')) {
                $previewNewsId = (int)$this->request->getArgument('news_preview');
            }

            if ($previewNewsId > 0) {
                if ($this->isPreviewOfHiddenRecordsEnabled()) {
                    $news = $this->newsRepository->findByUid($previewNewsId,false);
                } else {
                    $news = $this->newsRepository->findByUid($previewNewsId);
                }
            }
        }

https://github.com/georgringer/news/blob/master/Classes/Controller/NewsController.php#L338

,

我假设您也需要 URL。如果你想看看,我在这里给出了答案。

Show,edit and update hidden records in FrontEnd (TYPO3)

您也可以根据自己的需要进行调整。

最好的问候