typo3 - TYPO3 Extbase:更新记录并记录更改
问题描述
当我像这样使用 Extbase 存储库(例如在 cronjob 或前端)更新对象时......
$myRepository->update($myObject);
然后我在 TYPO3 BE 中使用“显示更改历史记录/撤消”按钮来记录这条记录,我没有看到任何历史记录。我只在 TYPO3 BE 中编辑对象时看到历史记录。
如何启用历史记录?
解决方案
短版:您不能,因为历史记录仅用于在后端界面中完成的更改。
更长的版本:你有点,有点可以,但这会在你的存储库中涉及相当多的自定义代码,这些代码会做以下两件事之一:
- 覆盖
update
存储库上的方法,并从中触发DataHandler
方法来更新记录 - 然后使用持久性会话将您的对象标记为干净,这样 Extbase 就不会再次尝试持久化它。通过更新DataHandler
将写入历史记录。 - 也覆盖该
update
方法,但手动写入历史记录,而不是允许DataHandler
这样做。
第一个解决方案处理起来非常复杂。第二个意味着您必须实现一些(重复的)代码,并且可能不会导致所有常见的挂钩在 TYPO3 中触发(这通常很好,但有时会导致第三方扩展出现问题)。如果您被迫这样做,我会选择第二种解决方案。但我首先会考虑是否需要为匿名(无 BE 用户)编辑提供特定于 BE 的历史记录,这接近于滥用撤销历史记录的用途:跟踪谁进行了更改。
推荐阅读
- amazon-web-services - 使用 CORS 在 AWS S3 存储桶上获取
- python - Python Datacompy 库:如何将报告字符串保存到 csv 文件中?
- django - Celery 4 + Django + Redis,文档中缺少 django 设置部分?
- postgresql - 从两个表在 postgresql 中进行计算
- object - 如何使用 pytest 夹具实例化被测对象?
- reactjs - React 中的方法仅适用于第一个 Mounting 组件
- r - 在 R Shiny 中使用模型,尝试改变一个参数并检查输出如何变化
- android - Android导航弹出动画不起作用
- c - 为什么我们在 xchg() 之前需要 pushcli()?
- javascript - edge.foreach 不是 vis DataView 的函数