无法使信号/插槽工作

时间:2014-12-18 16:04:25

标签: php typo3 extbase typo3-6.2.x

保存Youtube ID后,我想获取一些API数据并将其写入数据库。但我的功能永远不会被调用。到目前为止我尝试过的:

ext_localconf.php

\TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\SignalSlot\\Dispatcher')->connect(
    'TYPO3\\CMS\\Extbase\\Persistence\\Generic\\Backend',
    'afterInsertObject',
    'VENDOR\\MyExtension\\Slots\\SaveVideo',
    'getVideoData'
);

类/插槽/ SaveVideo.php

namespace VENDOR\MyExtension\Slots;

class SaveVideo {
    public function getVideoData($object) {     
        echo "Yeaha";
        var_dump($object);
    }
}

1 个答案:

答案 0 :(得分:1)

当您在后端编辑记录时,您可以通过名称为TCEForm和TCEMain的TCE(TYPO3核心引擎)进行编辑。

TCEForm

TCEForm从TCA(表格配置数组)生成表格,您可以在其中编辑和创建新记录。

TCEMain

TCEMain负责处理数据并将其存储在数据库中。它还负责移动,复制,删除,取消删除,本地化和版本等命令。 TCEMain有一个新名称DataHandlerDataHandler课程可以在这里找到:

typo3/sysext/core/Classes/DataHandling/DataHandler.php

You can read more about TCE here

如何实现钩子

DataHandler类有很多钩子,您可以在将数据存储到后端之前对其进行操作。尝试搜索$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS'],您会发现如下所示。

if (is_array($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass'])) {

我们可以使用它来注册ext_localconf.php中的钩子。请注意,有许多可用的钩子类型,但它是我们感兴趣的processDatamapClass

在你ext_localconf.php添加:

$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass'][] = 'VendorName\\ExtentionName\\Hooks\\ProcessDatamapClass';

在此内容中创建文件extension_name/Classes/Hooks/ProcessDatamapClass.php

<?php
namespace VendorName\ExtentionName\Hooks;

class ProcessDatamapClass {
    public function processDatamap_postProcessFieldArray($status, $table, $id, &$fieldArray, $obj) {
        if($table == 'tx_extentionname_domain_model_yourtable') {
            // Your code goes here!
            // Note that $fieldArray is a reference so you can now modify the fields
            // before they are stored in the database
        }
    }
}

现在,每次在后端编辑或创建记录时,都会运行此代码。因此,仅为您的记录类型/表名封装代码非常重要!

我希望这有助于你。 You can read more about hooks here