首页 > 解决方案 > 在同一页面上的多个操作中访问表单数据

问题描述

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

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

这有可能吗?

标签: typo3extbasetypo3-extensions

解决方案


内置 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 )

定制解决方案

您可以在以下位置手动设置 Extbase 操作的参数initializeAction

$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;
        }
    }
}

推荐阅读