SuperAPI AI 工具集

typo3-datahandler

数据与分析

查看项目

更新于 10-15 21:10

技能介绍

用途:该技能面向 TYPO3 v14,讲解如何用 PHP 通过 DataHandler 以编程方式创建、更新、移动、复制、本地化和删除 TYPO3 记录,典型场景包括导入脚本、CLI 命令和数据迁移。

主要能力:核心原则是禁止对 pages、tt_content 及任何 TCA 配置表使用原生 SQL(INSERT/UPDATE/DELETE),必须用 DataHandler,以保证引用索引(sys_refindex)更新、缓存清理、版本历史(sys_history)、工作区兼容、钩子/事件集成、FlexForm 处理与 MM 关系管理。例外允许原生 SQL 的场景包括:无 TCA 的自定义日志表、只读的批量分析/报表查询、以及显式重建引用索引的迁移脚本。

使用方式:数据映射 $data[tableName][uid][fieldName] = value 用于创建或更新,新记录 UID 用 NEW 开头的唯一字符串,可用 NEW 记录作为 pid 引用;命令映射 $cmd[tableName][uid][command] = value 用于 delete、move、copy、localize 等操作。执行时用 GeneralUtility::makeInstance(DataHandler::class) 获取实例(不要注入构造函数,也不要 new),先调用 start($dataMap, $commandMap[, $backendUser]),再调用 process_datamap() 和/或 process_cmdmap(),最后检查 errorLog、substNEWwithIDs 及工作区下的 autoVersionIdMap。CLI/调度器环境需先 Bootstrap::initializeBackendAuthentication(),TYPO3 命令使用 cli 后端用户,也可传入 BackendUserAuthentication 对象。

限制:官方文档未定义 DataHandler 的通用事务契约,扩展代码应先用普通 API,确需事务时须自行验证数据库连接与副作用。v14 中 ReferenceIndex 与 updateRefIndexTable() 均为 @internal,不建议扩展直接操作,优先使用 vendor/bin/typo3 referenceindex:update 或交由 DataHandler 维护。缓存建议使用 CacheManager、缓存组或 PSR-14 缓存事件,而非旧式 DataHandler 缓存辅助方法。所有 API 使用前应查阅官方文档确认在 v14 中未被弃用。