TYPO3 Extbase:使用更改日志更新记录
TYPO3 Extbase: update record with logging of changes
当我像这样使用 Extbase 存储库更新对象时(例如,在 cronjob 或前端中)...
$myRepository->update($myObject);
然后我在 TYPO3 BE 中使用按钮 "Display change history / Un-do" 记录,我没有看到任何历史记录。我在TYPO3 BE中编辑对象时只看到历史。
如何启用历史记录?
简短版本:不能,因为历史记录仅针对在后端界面中完成的更改。
更长的版本:你有点,有点可以,但这会在你的存储库中涉及相当多的自定义代码,这些代码会做以下两件事之一:
- 覆盖存储库上的
update
方法,并从中触发 DataHandler
方法来更新记录 - 然后使用持久性会话将对象标记为干净,这样 Extbase 就不会尝试再坚持下去。通过 DataHandler
更新将写入历史记录。
- 也重写
update
方法,但手动写入历史记录,而不是让 DataHandler
这样做。
第一个解决方案处理起来非常复杂。第二个意味着你必须实现一些(重复的)代码并且可能不会导致所有常见的钩子在 TYPO3 中触发(这通常很好但有时会导致第三方扩展出现问题)。如果你被迫这样做,我会选择第二种解决方案。但我首先会考虑是否需要为匿名(无 BE 用户)编辑提供特定于 BE 的历史记录,这接近于滥用撤消历史记录 also 用于:跟踪谁 进行了更改。
当我像这样使用 Extbase 存储库更新对象时(例如,在 cronjob 或前端中)...
$myRepository->update($myObject);
然后我在 TYPO3 BE 中使用按钮 "Display change history / Un-do" 记录,我没有看到任何历史记录。我在TYPO3 BE中编辑对象时只看到历史。
如何启用历史记录?
简短版本:不能,因为历史记录仅针对在后端界面中完成的更改。
更长的版本:你有点,有点可以,但这会在你的存储库中涉及相当多的自定义代码,这些代码会做以下两件事之一:
- 覆盖存储库上的
update
方法,并从中触发DataHandler
方法来更新记录 - 然后使用持久性会话将对象标记为干净,这样 Extbase 就不会尝试再坚持下去。通过DataHandler
更新将写入历史记录。 - 也重写
update
方法,但手动写入历史记录,而不是让DataHandler
这样做。
第一个解决方案处理起来非常复杂。第二个意味着你必须实现一些(重复的)代码并且可能不会导致所有常见的钩子在 TYPO3 中触发(这通常很好但有时会导致第三方扩展出现问题)。如果你被迫这样做,我会选择第二种解决方案。但我首先会考虑是否需要为匿名(无 BE 用户)编辑提供特定于 BE 的历史记录,这接近于滥用撤消历史记录 also 用于:跟踪谁 进行了更改。