在同一页面上的多个操作中访问表单数据

问题描述

我正在尝试从同一页面上的另一个操作中的一个操作访问提交的对象,同时使其可用于两个操作。 示例:站点 /search/ 嵌入了两个插件:

  • 搜索插件
    • 显示搜索表单
    • 向自身提交表单
  • 结果插件
    • 应该从 SearchPlugin 获取表单数据

现在,如果我将 SearchPlugin 表单数据提交给自身,则只有 SearchPlugin 操作中的表单数据可用,而 ResultPlugin 中没有。如果它将 SearchPlugin 表单提交给 ResultPlugin 操作,那么我只有 ResultPlugin 中的可用数据,而不是 SearchPlugin 中的数据。 提交后,我需要数据在同一站点上的两个插件/操作中都可用。

这有什么可能吗?

解决方法

内置 Extbase 配置选项

您可以使用 view.pluginNamespace 让两个插件使用相同的 HTTP 参数命名空间,(例如 search 而不是 tx_extension_plugin1/tx_extension_plugin2):https://docs.typo3.org/m/typo3/book-extbasefluid/master/en-us/b-ExtbaseReference/Index.html

这将使您的 Extbase 操作能够“共享”所有参数。确保您的所有插件操作都已为此做好准备。

(请记住,虽然这个“功能”可能会被弃用一次,可能是因为它为有效解析路由配置增加了一些架构负担。但这只是谣言,我从这里得到了这个想法:https://github.com/TYPO3-Documentation/TYPO3CMS-Book-ExtbaseFluid/pull/379/files

自定义解决方案

您可以在 initializeAction 中为您的 Extbase 操作手动设置参数:

$pluginContexts = [
  'tx_extension_plugin2',];
// look for a SearchObject in a different (HTTP) plugin namespace
if (!$this->request->hasArgument('searchObject')) {
    foreach ($pluginContexts as $pluginContext) {
        $foreignPluginContext = \TYPO3\CMS\Core\Utility\GeneralUtility::_GP($pluginContext);
        if (isset($foreignPluginContext['searchObject'])) {
            $searchObject = $foreignPluginContext['searchObject'];
            // if needed do some mapping to object here or validate
            ...            
            $this->request->setArgument('searchObject',$searchObject);

            break;
        }
    }
}

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...