Не могу получить сигнал / слот для работы

После сохранения идентификатора Youtube я хотел бы получить некоторые данные 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

Решение

Когда вы редактируете записи в бэкэнде, вы делаете это через TCE (TYPO3 Core Engine), также известный как TCEForm и TCEMain.

TCEFORM

TCEForm генерирует форму из TCA (таблицы конфигурации таблицы), где вы можете редактировать и создавать новые записи.

TCEmain

TCEMain занимается обработкой данных и хранит их в базе данных. Он также заботится о таких командах, как перемещение, копирование, удаление, восстановление, локализация и версия. TCEMain имеет новое имя, DataHandler, DataHandler класс можно найти здесь:

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

Вы можете прочитать больше о ТВК здесь

Как реализовать крючок

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
}
}
}

Этот код теперь будет запускаться каждый раз, когда вы редактируете или создаете запись в бэкэнде. Поэтому важно инкапсулировать ваш код только для вашего типа записи / имени таблицы!

Я надеюсь, что это помогло вам. Вы можете прочитать больше о крюках здесь.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]