读出 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
有问题
我收到以下错误:
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
数组可以看作是更改模式,其中包含 oldRecord
和 newRecord
用于 DataHandler
的特定调用。这可以看作是 RecordDataChangedEvent
的内容——在 TYPO3 中还不以这种方式存在。信息收集于DataHandler::compareFieldArrayWithCurrentAndUnset()
.
在 TYPO3 7.6 中,您可以通过三种方式访问信息:
- 通过 XCLASSing 重载 DataHandler 并提供
getHistoryRecords()
方法
- XCLASSing 基本上是一个糟糕的原则,因为您可以覆盖功能
在上游版本中可能会更改。在这种情况下,它将是 "okay"
因为您只是提供了一个新的 getter-方法,以前
不存在
- 在 XCLASS documentation
中查找更多详细信息
- 使用钩子自行收集和确定更改
processDatamap_preProcessFieldArray($incomingFieldArray, $table, $id, DataHandler $dataHandler)
processDatamap_postProcessFieldArray($status, $table, $id, $fieldArray, DataHandler $dataHandler)
- 收集单例对象中的差异,比较
$incomingFieldArray
和 $fieldArray
对于 $table
和 $id
的组合
- 然而,这遗漏了可能的版本和阴影交互,这些交互已应用于中间的字段阵列
- 从数据库中检索 table
sys_history
- 参见
DataHandler::setHistory()
并进行反向查找
- 在你的
processCmdmap_afterFinish
钩子被调用的时候,这个数据已经被写入了
- 从
sys_history
中查找以下条件的组合
tstamp
等于 $GLOBALS['EXEC_TIME']
tablename
等于 $table
且 recuid
等于 $id
- 字段
history_data
包含 $historyRecords
的序列化表示
我正在将 TYPO3 安装从 v6 更新到 v7,class TYPO3\CMS\Core\DataHandling\DataHandler
我收到以下错误:
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
数组可以看作是更改模式,其中包含 oldRecord
和 newRecord
用于 DataHandler
的特定调用。这可以看作是 RecordDataChangedEvent
的内容——在 TYPO3 中还不以这种方式存在。信息收集于DataHandler::compareFieldArrayWithCurrentAndUnset()
.
在 TYPO3 7.6 中,您可以通过三种方式访问信息:
- 通过 XCLASSing 重载 DataHandler 并提供
getHistoryRecords()
方法- XCLASSing 基本上是一个糟糕的原则,因为您可以覆盖功能 在上游版本中可能会更改。在这种情况下,它将是 "okay" 因为您只是提供了一个新的 getter-方法,以前 不存在
- 在 XCLASS documentation 中查找更多详细信息
- 使用钩子自行收集和确定更改
processDatamap_preProcessFieldArray($incomingFieldArray, $table, $id, DataHandler $dataHandler)
processDatamap_postProcessFieldArray($status, $table, $id, $fieldArray, DataHandler $dataHandler)
- 收集单例对象中的差异,比较
$incomingFieldArray
和$fieldArray
对于$table
和$id
的组合
- 然而,这遗漏了可能的版本和阴影交互,这些交互已应用于中间的字段阵列
- 从数据库中检索 table
sys_history
- 参见
DataHandler::setHistory()
并进行反向查找 - 在你的
processCmdmap_afterFinish
钩子被调用的时候,这个数据已经被写入了 - 从
sys_history
中查找以下条件的组合tstamp
等于$GLOBALS['EXEC_TIME']
tablename
等于$table
且recuid
等于$id
- 字段
history_data
包含$historyRecords
的序列化表示
- 参见