读出 protected 属性 TYPO3\CMS\Core\DataHandling\DataHandler::$historyRecords 的值

read out value of protected property TYPO3\CMS\Core\DataHandling\DataHandler::$historyRecords

我正在将 TYPO3 安装从 v6 更新到 v7,class TYPO3\CMS\Core\DataHandling\DataHandler

有问题

(https://typo3.org/api/typo3cms/class_t_y_p_o3_1_1_c_m_s_1_1_core_1_1_data_handling_1_1_data_handler.html).

我收到以下错误:

Fatal error: Cannot access protected property TYPO3\CMS\Core\DataHandling\DataHandler::$historyRecords ...

由以下调用引起

public function processCmdmap_afterFinish(&$data)
{
    $dataChanged = $data->historyRecords;

谁能告诉我在 TYPO3 v7 中如何获取 historyRecords 的值?

提前致谢!!!

DataHandler::$historyRecords 在 TYPO3 6.2 中没有被定义为 属性,而是被 DataHandler 中的 class 成员访问隐式设置(参见 DataHandler of 6.2)。在 TYPO3 7.6 中 属性 被首次声明并定义为 protected.

$historyRecords 数组可以看作是更改模式,其中包含 oldRecordnewRecord 用于 DataHandler 的特定调用。这可以看作是 RecordDataChangedEvent 的内容——在 TYPO3 中还不以这种方式存在。信息收集于DataHandler::compareFieldArrayWithCurrentAndUnset().

在 TYPO3 7.6 中,您可以通过三种方式访问​​信息:

  1. 通过 XCLASSing 重载 DataHandler 并提供 getHistoryRecords() 方法
    • XCLASSing 基本上是一个糟糕的原则,因为您可以覆盖功能 在上游版本中可能会更改。在这种情况下,它将是 "okay" 因为您只是提供了一个新的 getter-方法,以前
    • 不存在
    • XCLASS documentation
    • 中查找更多详细信息
  2. 使用钩子自行收集和确定更改
    • processDatamap_preProcessFieldArray($incomingFieldArray, $table, $id, DataHandler $dataHandler)
    • processDatamap_postProcessFieldArray($status, $table, $id, $fieldArray, DataHandler $dataHandler)
    • 收集单例对象中的差异,比较 $incomingFieldArray$fieldArray 对于 $table$id
    • 的组合
    • 然而,这遗漏了可能的版本和阴影交互,这些交互已应用于中间的字段阵列
  3. 从数据库中检索 table sys_history
    • 参见DataHandler::setHistory()并进行反向查找
    • 在你的processCmdmap_afterFinish钩子被调用的时候,这个数据已经被写入了
    • sys_history 中查找以下条件的组合
      • tstamp 等于 $GLOBALS['EXEC_TIME']
      • tablename 等于 $tablerecuid 等于 $id
    • 字段 history_data 包含 $historyRecords
    • 的序列化表示