Php TYPO3 TCA在后端保存对象后执行钩子

Php TYPO3 TCA在后端保存对象后执行钩子,php,typo3,hook,typo3-7.6.x,typo3-extensions,Php,Typo3,Hook,Typo3 7.6.x,Typo3 Extensions,如果一个对象被保存到后端,我想操作一些值并执行一个自定义函数。我通过谷歌搜索发现,我必须在我的ext\u localconfphp中指定这一点: $GLOBALS ['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass']['extkey'] = 'Vendor\\Extension\\Hook\\TCEmainHook'; $GLOBALS ['TYPO3_CONF_VARS

如果一个对象被保存到后端,我想操作一些值并执行一个自定义函数。我通过谷歌搜索发现,我必须在我的ext\u localconfphp中指定这一点:

$GLOBALS ['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass']['extkey'] = 'Vendor\\Extension\\Hook\\TCEmainHook';
$GLOBALS ['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processCmdmapClass']['extkey'] = 'Vendor\\Extension\\Hook\\TCEmainHook';
此外,我在扩展中创建了以下类/Classes/Hook/TCEmainHook.php

<?php
namespace Vendor\Extension\Hook;

class TCEmainHook {
public function processCmdmap_postProcess(
    $command, $table, $id, $value, 
    TYPO3\CMS\Core\DataHandling\DataHandler &$pObj) {
       echo '<pre>';
           var_dump($command);
       echo '<pre>';
       die();
    }
}
我不明白我做错了什么。有人有什么建议吗

参考解决方案: 多亏了jokumer的建议,我查看了BE模块“配置”中加载的其他钩子以及加载方式。我看到我的钩子看起来与其他钩子不同,所以我检查了powermail钩子是如何定义的(这是我正在使用的另一个扩展),通过以下更改,钩子终于可以工作了:

<?php
namespace NXS\NxsReferenzen\Hook;

class TCEmainHook {
    public function processCmdmap_postProcess($command, $table, $id, $value, \TYPO3\CMS\Core\DataHandling\DataHandler &$pObj) {
        echo '<pre>';
        var_dump($command);
        echo '<pre>';
        die();
    }
}

在本地配置(ext_localconf.php)中注册钩子类:

确保钩子类具有命名空间声明:


要找到一些工作示例,您可以查看菜单项“$GLOBALS['TYPO3_CONF_VARS']”(全局配置)下的BE modul“Configuration”,在树状视图中打开SC_OPTIONS->t3lib/class.t3lib_tcemain.php->ProcessCmdMapClass谢谢您的建议。这使我走上了正确的道路。我用工作示例更新了这个问题,为什么是ext\u localconf而不是ext\u表?后者负责BE方面。指导线说。。。扩展作者应该在ext_localconf.php中放置的典型功能。。。正在将挂钩或任何简单数组分配注册到$TYPO3\u CONF\u VARS选项。。。
$GLOBALS ['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass'][] = 'EXT:nxs_referenzen/Classes/Hook/TCEmainHook.php:NXS\\NxsReferenzen\\Hook\\TCEmainHook';
$GLOBALS ['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processCmdmapClass'][] = 'EXT:nxs_referenzen/Classes/Hook/TCEmainHook.php:NXS\\NxsReferenzen\\Hook\\TCEmainHook';
$GLOBALS ['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass'][''] = 'NXS\\NxsReferenzen\\Hook\\TCEmainHook';
$GLOBALS ['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processCmdmapClass'][''] = 'NXS\\NxsReferenzen\\Hook\\TCEmainHook';
<?php
namespace NXS\NxsReferenzen\Hook;

class TCEmainHook {
    public function processCmdmap_postProcess($command, $table, $id, $value, \TYPO3\CMS\Core\DataHandling\DataHandler &$pObj) {
        echo '<pre>';
        var_dump($command);
        echo '<pre>';
        die();
    }
}