Typo3 列表视图中的引用完整性
我用扩展生成器在TYPO3 v4.5中做了一个扩展。现在我有一些表,它们没有创建/更新功能,因为它们不会经常更改(某个月只更改一次)。要更改它们,我想使用TYPO3中的列表视图 这样,我可以创建和更新我的记录。但是如果我有一个记录,它与另一个记录有关,我可以简单地删除它。另一条记录现在具有无效值 例如:Typo3 列表视图中的引用完整性,typo3,fluid,extbase,Typo3,Fluid,Extbase,我用扩展生成器在TYPO3 v4.5中做了一个扩展。现在我有一些表,它们没有创建/更新功能,因为它们不会经常更改(某个月只更改一次)。要更改它们,我想使用TYPO3中的列表视图 这样,我可以创建和更新我的记录。但是如果我有一个记录,它与另一个记录有关,我可以简单地删除它。另一条记录现在具有无效值 例如: Books _________________________ | Name | AuthorID | ------------------------- |Harry Potte
Books
_________________________
| Name | AuthorID |
-------------------------
|Harry Potter | 1 |
-------------------------
Author
_________________________
| ID | Name |
-------------------------
| 1 | Rowling |
-------------------------
现在如果我删除Rowling,我的AuthorID字段中有“无效值”。
我能阻止吗
编辑:好的,我已经找到了一种防止这种情况的方法:我必须在TCE中为我的扩展使用predb钩子。但是如果我删除一条记录,这段代码(仅用于实验)就不起作用。我想我将得到一个名为“deleted”的数组元素,其值为1。但事实并非如此。其他数据(如果我更改信息或创建新记录)出现。
/**
*@param字符串$status
*@param string$表
*@param int$id
*@param数组$fieldArray
*@param tce_main$tcemain
*/
函数processDatamap_postProcessFieldArray($status、$table、$id、&$fieldArray、&$tcemain){
$fp=fopen('../../typo3conf/ext/test/hooks/output.txt',w');
对于($x=0;$x
编辑2:
与第一个答案中的注释一样,我可以使用status==delete检查typo3是否要删除记录。但是,如果我不能更改已删除属性中的数据(因为它不在fieldArray中),如何防止这种情况?有人知道线索吗
感谢您的回复
Agash Thamo。您可以简单地覆盖存储库中的delete方法,并检查是否有对其他对象的引用。我认为列表视图直接用TCA写入数据库?简单地编辑我的存储库真的能避免这种情况吗?顺便说一下:我的存储库中没有任何delete方法。它只是扩展了标准的extbase存储库。我必须加一个吗?覆盖标准?我不知道你的扩展设置是什么样子,但我认为有两种方法。第一个可能是您的存储库。如果添加删除方法,则可以检查外键。另一种方法可以是数据库中的索引。如果您在字段中设置了外来项,则typo3无法删除此项,或者您删除了级联。问题是,typo3不会删除任何记录。它只设置了一个名为“已删除”的标志。没错。还有一种可能性。你可以写这样的钩子,我试过钩子。我将用代码编辑问题,它不起作用,也许你知道我做错了什么。
/**
* @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);
}