Extbase Hooks - 在创建记录时执行代码

Extbase Hooks - execute code upon record creation

我想创建一个标准的 typo3 扩展,但是当我创建一个记录(或修改它)时我想计算一些东西(在我的例子中我想调用 Google 映射 API 到从给定地址获取坐标)。

所以我找了一个钩子什么的。有什么想法吗?

也许this answer对您有用。

在您的扩展程序中将您的 class 注册为 data handling hook。这一个 "is called AFTER all commands of the commandmap" 被处决了。也许你需要寻找更合适的。

然后在您注册的 Hook 中,即 'typo3conf/ext/your_ext/Classes/Hooks/AfterCreate.php' 进行计算。希望这能让你走上正轨。

我的一个项目示例,可以帮助您在更改记录时在后端进行挂钩。

In your extension file ext_localconf.php

// Hook for cancellation
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass'][] = 'EXT:femanager/class.tx_femanager_tcemainprocdm.php:tx_femanager_tcemainprocdm';

hook file class.tx_femanager_tcemainprocdm.php where you can execute your script

class tx_femanager_tcemainprocdm{

    function processDatamap_postProcessFieldArray ($status, $table, $id, &$fieldArray, &$reference){
        // $status also called action like delete
        // $table - table name of excute backend action
        // $id - record UID
        // $fieldArray - fields of your table

        if($table = 'your_extension_table_name'){
            // your script  
        }
    }
}

在我的特殊情况下,保存记录时不需要计算坐标。所以我只是在控制器中使用了 listAction,检查坐标是否存在,如果不存在则调用 Google API(如果 Google API 不提供则发送电子邮件坐标回)。

在另一种情况下,新记录来自前端插件,我必须对这些数据做一些事情,我在控制器中使用了 createAction。 (我不确定从后端创建记录时是否也调用了createAction。)