TYPO3 Extbase:使用更改日志更新记录
当我用Extbase存储库(例如在cronjob或前端)更新对象时,就像这样TYPO3 Extbase:使用更改日志更新记录,typo3,extbase,typo3-extensions,Typo3,Extbase,Typo3 Extensions,当我用Extbase存储库(例如在cronjob或前端)更新对象时,就像这样 $myRepository->update($myObject); 之后,我用按钮“显示更改历史记录/Un do”来显示TYPO3 BE中的记录,我没有看到任何历史记录。我只在TYPO3 BE中编辑对象时看到历史记录 如何启用历史记录?简短版本:您不能,因为历史记录仅用于在后端接口中完成的更改 更长的版本:您可以,可以,但这将涉及存储库中相当多的自定义代码,这将完成以下两件事之一: 覆盖存储库上的update方
$myRepository->update($myObject);
之后,我用按钮“显示更改历史记录/Un do”来显示TYPO3 BE中的记录,我没有看到任何历史记录。我只在TYPO3 BE中编辑对象时看到历史记录
如何启用历史记录?简短版本:您不能,因为历史记录仅用于在后端接口中完成的更改 更长的版本:您可以,可以,但这将涉及存储库中相当多的自定义代码,这将完成以下两件事之一:
update
方法,并从中激发DataHandler
方法来更新记录-然后使用持久性会话将对象标记为干净,以便Extbase不再尝试将其持久化。通过DataHandler
更新将写入历史记录update
方法,但手动写入历史记录,而不允许DataHandler
这样做第一个解决方案处理起来非常复杂。第二种方法意味着您必须实现一点(重复的)代码,并且很可能不会在TYPO3中触发所有常见的钩子(这通常很好,但有时会给第三方扩展带来麻烦)。如果你被迫这样做,我会选择第二种解决方案。但我首先要考虑的是,对于匿名(不为用户)的编辑是否需要有特定的历史,这是与滥用撤销历史的滥用有关的:追踪谁做出了改变。
短版本:你不能,因为历史只是在后端界面中做的修改。
更长的版本:您可以,可以,但这将涉及存储库中相当多的自定义代码,这将完成以下两件事之一:update
方法,并从中激发DataHandler
方法来更新记录-然后使用持久性会话将对象标记为干净,以便Extbase不再尝试将其持久化。通过DataHandler
更新将写入历史记录update
方法,但手动写入历史记录,而不允许DataHandler
这样做第一个解决方案处理起来非常复杂。第二种方法意味着您必须实现一点(重复的)代码,并且很可能不会在TYPO3中触发所有常见的钩子(这通常很好,但有时会给第三方扩展带来麻烦)。如果你被迫这样做,我会选择第二种解决方案。但我首先要考虑的是,对于匿名(不为用户)的编辑是否需要有特定的历史,这一点与滥用撤销历史的滥用有关:追踪谁做出了改变。还有子属性(如图像或其他东西)的关系(M:N,1:N等)。必须使用DataHandler手动完成。更多的DataHandler可以在这里找到:此外,子属性(如图像或其他东西(M:N、1:N等)的关系必须通过使用DataHandler手动完成。更多DataHandler可在此处找到: