typo3 - 在同一页面上的多个操作中访问表单数据
问题描述
我正在尝试从同一页面上的另一个操作中的一个操作访问提交的对象,同时使其可用于两个操作。示例:站点 /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 )
定制解决方案
您可以在以下位置手动设置 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;
}
}
}
推荐阅读
- javascript - 使滑块气泡跟上左手柄
- tensorflow - MASK-RCNN 的标记数据集:只有观察良好的对象?
- linq - 在超过 14 个条目的列表中使用包含时,mobileservicesynctable pullasync 失败
- racket - 合同可以匹配吗?
- python - 为什么枕头将图像加载为矩形而不是圆形?
- javascript - JSON.stringify 带有键的对象,子对象中没有引号
- linux - 在 Linux 上确定自进程启动以来的时间
- django - django csv import-export 的外键不匹配错误
- html - 在 Bootstrap 网格中安排响应式图像视图
- android - 如何更改 Termux 中的默认启动文件夹?