列表视图中的参照完整性

时间:2013-03-18 11:12:09

标签: typo3 fluid extbase

我使用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。

1 个答案:

答案 0 :(得分:0)

您可以简单地覆盖存储库中的delete方法,并检查是否存在对其他对象的引用。