You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在TYPO3的ext:form模板和自定义finisher中获取FlexForm自定义设置

可以拿到,你遇到的问题是ext:form默认不会自动把自定义Flexform sheet的配置注入到模板上下文和Finisher运行环境,需要额外加配置和代码实现:

1. 模板中读取自定义配置

推荐通过自定义DataProcessor注入配置,无需修改原有模板逻辑:

1.1 新建DataProcessor类

Classes/DataProcessing/FlexFormSettingsProcessor.php

<?php
namespace Vendor\ExtKey\DataProcessing;

use TYPO3\CMS\Core\Configuration\FlexForm\FlexFormTools;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer;
use TYPO3\CMS\Frontend\ContentObject\DataProcessorInterface;

class FlexFormSettingsProcessor implements DataProcessorInterface
{
    public function process(
        ContentObjectRenderer $cObj,
        array $contentObjectConfiguration,
        array $processorConfiguration,
        array $processedData
    ): array {
        // 解析Flexform中extraEntry sheet的配置
        $flexFormTools = GeneralUtility::makeInstance(FlexFormTools::class);
        $flexFormData = $flexFormTools->convertFlexFormContentToArray($cObj->data['pi_flexform']);
        
        // 合并到现有settings变量
        $processedData['settings'] = array_merge(
            $processedData['settings'] ?? [],
            $flexFormData['extraEntry'] ?? []
        );
        return $processedData;
    }
}

1.2 注册DataProcessor到form插件

在你扩展的TypoScript配置中加入:

tt_content.form_formframework.dataProcessing.10 = Vendor\ExtKey\DataProcessing\FlexFormSettingsProcessor

注册完成后就可以直接在form模板中用{settings.postsPerPage}读取配置值。

2. 自定义Finisher中读取自定义配置

Finisher可以通过运行时上下文拿到当前插件的内容对象,直接解析Flexform取值即可,示例代码:

<?php
namespace Vendor\ExtKey\Domain\Finishers;

use TYPO3\CMS\Core\Configuration\FlexForm\FlexFormTools;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Form\Domain\Finishers\AbstractFinisher;

class CustomFinisher extends AbstractFinisher
{
    protected function execute(): void
    {
        // 获取当前内容对象
        $cObj = $this->finisherContext->getFormRuntime()
            ->getRequest()
            ->getAttribute('currentContentObject');
        
        // 解析Flexform取值
        $flexFormTools = GeneralUtility::makeInstance(FlexFormTools::class);
        $flexFormData = $flexFormTools->convertFlexFormContentToArray($cObj->data['pi_flexform']);
        $postsPerPage = $flexFormData['extraEntry']['settings.postsPerPage'] ?? 3;
        
        // 后续业务逻辑
    }
}

额外优化建议

你现有的FlexFormHook中硬编码文件路径的写法可以优化,适配不同部署结构:

// 替换原来的$file赋值逻辑
$file = \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('ext_key') . 'Configuration/Example.xml';

内容的提问来源于stack exchange,提问作者chris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 22:06:04