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

Typo3 11.5表单Finishers执行顺序异常,求调整方法

解决TYPO3表单Finisher执行顺序不符的问题

问题分析

你在表单定义yaml里指定的Finisher顺序是CyberImpactFinisher > EmailToReceiver > FormToDatabase,但实际执行和代码获取到的顺序是EmailToReceiver > CyberImpactFinisher > FormToDatabase,导致调用cancel()只能终止数据库存储,邮件仍会发送。这大概率是自定义Finisher的优先级配置缺失/错误,TYPO3中Finisher的执行顺序会受注册时的priority参数影响,默认优先级为100,数值越小越先执行。如果系统默认的EmailToReceiver优先级比你的自定义Finisher低,就会被提前执行。

调整方法

1. 修改自定义Finisher的注册优先级

找到你注册CyberImpactFinisher的配置文件(通常是EXT:site_pgq/Configuration/Services.yaml),给它设置一个比默认值(100)更小的priority,确保它排在EmailToReceiver前面:

Vendor\SitePgq\Finishers\CyberImpactFinisher:
  tags:
    - name: form.finisher
      identifier: 'CyberImpactFinisher'
      priority: 50 # 数值越小,执行顺序越靠前

2. 检查表单继承(若有)

如果你的contactUs.form.yaml继承了其他父表单配置,要确保父表单的Finisher没有覆盖当前表单的顺序。可以在当前表单的finishers配置前加上overrideChildProperties: true,强制覆盖父表单的Finisher设置:

finishers:
  overrideChildProperties: true
  -
    options: &cyberImpactFinisherOptions
      message: 'Merci pour votre message.'
      templateRootPaths:
        100: 'EXT:site_pgq/Resources/Private/Templates/Partial/'
      templateName: ContactThankYou
    identifier: CyberImpactFinisher
  -
    options: &emailToReceiverOptions
      # ... 你的EmailToReceiver配置
    identifier: EmailToReceiver
  -
    identifier: FormToDatabase

3. 验证调整结果

修改后清除TYPO3缓存,然后通过代码$this->finisherContext->getFormRuntime()->getFormDefinition()->getFinishers();再次检查Finisher顺序,确认CyberImpactFinisher排在第一位。之后测试调用$this->finisherContext->cancel();,验证后续的邮件发送和数据库存储是否都被终止。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 17:05:21