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

TYPO3 TCA execute hook after object save in backend

如果对象通过后端保存,我想操纵一些值并执行自定义函数。我通过 google 搜索发现我必须在我的 ext_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 中创建了以下 class。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();
    }
}

但是无论我尝试以下哪个选项,我在保存对象后都得到一个空的后端框架:

$GLOBALS ['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processCmdmapClass']['NXS\NxsReferenzen\Hook\TCEmainHook'] = 'EXT:nxs_referenzen/Classes/Hook/TCEmainHook.php';
$GLOBALS ['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processCmdmapClass'][''] = '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';

我不明白我做错了什么。有人有什么建议吗?

参考方案: 感谢 jokumer 的建议,我查看了 BE 模块 'Configuration' 中加载了哪些以及如何加载其他钩子。我看到我的挂钩看起来与其他挂钩不同,所以我检查了 powermail 挂钩的定义方式(这是我正在使用的另一个扩展)并且经过以下更改后挂钩终于可以工作了:

$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';

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

$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';

确保你的钩子 class 有命名空间声明:

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