我使用Extension Builder在TYPO3 v4.5中进行了扩展。现在我有一些没有创建/更新功能的表,因为它们不会经常更改(在某个月只有一次)。要更改它们,我想使用TYPO3中的列表视图。
这有效,我可以创建和更新我的记录。但是,如果我有一个记录,那与另一个记录的关系,我可以简单地删除它。另一条记录现在的值无效。
例如:
Books
_________________________
| Name | AuthorID |
-------------------------
|Harry Potter | 1 |
-------------------------
Author
_________________________
| ID | Name |
-------------------------
| 1 | Rowling |
-------------------------
现在如果删除罗琳,我的AuthorID字段中的“无效值”。 我可以阻止这个吗?
编辑:好的,我找到了一种可以防止这种情况的方法:我必须在TCE中使用predb钩子来扩展。但是,如果删除记录,此代码(仅用于试验)不起作用。我以为我会得到一个名为'deleted'的数组元素,其值为1.但它没有出现。出现其他数据(如果我更改信息或创建新记录)。 /**
* @param string $status
* @param string $table
* @param int $id
* @param array $fieldArray
* @param tce_main $tcemain
*/
function processDatamap_postProcessFieldArray($status, $table, $id, &$fieldArray, &$tcemain) {
$fp = fopen('../../typo3conf/ext/test/hooks/output.txt', 'w');
for ($x = 0; $x < sizeof($fieldArray); ++$x)
{
fwrite($fp, "key: ".key($fieldArray)."\tvalue: ".current($fieldArray)."\n");
next($fieldArray);
}
fclose($fp);
}
EDIT2: 就像在第一个答案的评论中一样,我可以使用status == delete来检查typo3是否要删除记录。但是,如果我无法更改已删除属性中的数据(因为它不在fieldArray中),如何防止这种情况?有人知道吗?
感谢您的回复 Agash Thamo。
答案 0 :(得分:0)
您可以简单地覆盖存储库中的delete方法,并检查是否存在对其他对象的引用。