Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typo3 列表视图中的引用完整性_Typo3_Fluid_Extbase - Fatal编程技术网

Typo3 列表视图中的引用完整性

Typo3 列表视图中的引用完整性,typo3,fluid,extbase,Typo3,Fluid,Extbase,我用扩展生成器在TYPO3 v4.5中做了一个扩展。现在我有一些表,它们没有创建/更新功能,因为它们不会经常更改(某个月只更改一次)。要更改它们,我想使用TYPO3中的列表视图 这样,我可以创建和更新我的记录。但是如果我有一个记录,它与另一个记录有关,我可以简单地删除它。另一条记录现在具有无效值 例如: Books _________________________ | Name | AuthorID | ------------------------- |Harry Potte

我用扩展生成器在TYPO3 v4.5中做了一个扩展。现在我有一些表,它们没有创建/更新功能,因为它们不会经常更改(某个月只更改一次)。要更改它们,我想使用TYPO3中的列表视图

这样,我可以创建和更新我的记录。但是如果我有一个记录,它与另一个记录有关,我可以简单地删除它。另一条记录现在具有无效值

例如:

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);
    }