TYPO3 form扩展自定义Finisher必备文件与配置报错排查
你遇到的The finisher preset identified by “xxx” could not be found, or the implementationClassName was not specified报错由配置不符合规范导致,没有缺失必备文件,按以下步骤修正即可:
修正PHP类命名空间
TYPO3类自动加载默认以扩展下的Classes目录为命名空间根,命名空间里不能额外加\Classes层级,你当前的命名空间多了这一层,系统无法定位Finisher类。
打开Classes/Domain/Finishers/MyOwnFinisher.php,将命名空间修改为:
namespace mastar\testprivateext\Domain\Finishers;
类文件的实际存放路径不需要调整,和你当前的目录结构匹配。
修正Backend.yaml类路径
对应修改Configuration/Form/Backend.yaml里的类引用,去掉多余的\Classes层级,修正后完整配置:
prototypes: standard: finishersDefinition: MyOwn: implementationClassName: 'mastar\testprivateext\Domain\Finishers\MyOwnFinisher' options: table: tx_testprivateext_domain_model_YetAnotherTable
修复TypoScript加载问题
你当前的Configuration/TypoScript/setup.typoscript存在两个问题:
- 第一行的自引用导入逻辑错误:当前文件本身就是setup.typoscript,导入同目录下所有*.typoscript文件会触发循环加载,直接删掉
@import "EXT:testprivateext/Configuration/TypoScript/Setup/*.typoscript"这行即可。 - 缺少TypoScript注册逻辑:如果不在扩展里主动注册,setup.typoscript里的配置不会生效。打开扩展根目录的
ext_localconf.php,添加如下注册代码:
<?php defined('TYPO3') || die(); \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScriptSetup( '@import "EXT:testprivateext/Configuration/TypoScript/setup.typoscript"' );
如果需要在后端表单编辑器里直接选择这个自定义Finisher,还要在
Configuration/TCA/Overrides/sys_template.php里注册静态TypoScript模板,否则后端编辑器加载不到你的Finisher配置。
刷新自动加载与缓存
所有配置改完后,在项目根目录执行命令刷新类自动加载:
composer dump-autoload
之后进入TYPO3后台清空全部系统缓存,即可正常识别自定义Finisher。
补充:你在Finisher类里定义的$shortFinisherIdentifier属性不需要手动赋值,只要yaml里finishersDefinition下的键名和你使用的Finisher标识符一致,系统会自动识别,不会触发报错。
内容的提问来源于stack exchange,提问作者Starzi

