保存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);
}
}
答案 0 :(得分:1)
当您在后端编辑记录时,您可以通过名称为TCEForm和TCEMain的TCE(TYPO3核心引擎)进行编辑。
TCEForm从TCA(表格配置数组)生成表格,您可以在其中编辑和创建新记录。
TCEMain负责处理数据并将其存储在数据库中。它还负责移动,复制,删除,取消删除,本地化和版本等命令。 TCEMain有一个新名称DataHandler
。 DataHandler
课程可以在这里找到:
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