Ich habe eine funktionierende Extbase-Erweiterung in TYPO3 V6.2, die Produkte speichert. Jetzt möchte ich über die Verwendung von Signal/Slot (Extbase-Variante von Hooks) lernen. Ich frage mich, warum das Beispiel nicht funktioniert. Wenn ich ein Produkt im List-Modul im TYPO3-Backend aktualisiere, wird es korrekt gespeichert, aber es wird keine Nachricht angezeigt.TYPO3 Extbase - wie Core Signal/Slots zu verwenden
Datei typo3conf/ext/myext/ext_localconf.php
$signalSlotDispatcher = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\SignalSlot\\Dispatcher');
$signalSlotDispatcher->connect(
'TYPO3\\CMS\\Extbase\\Persistence\\Generic\\Backend',
'afterUpdateObject',
'MyVendor\\MyExt\\Service\\Signalservice',
'myAfterUpdate',
FALSE
);
Datei typo3conf/ext/myext/Service/Signalservice.php
namespace MyVendor\MyExt\Service;
class Signalservice implements \TYPO3\CMS\Core\SingletonInterface {
/**
* @param \TYPO3\CMS\Extbase\DomainObject\DomainObjectInterface $object
*/
public function myAfterUpdate(\TYPO3\CMS\Extbase\DomainObject\DomainObjectInterface $object){
if ($object instanceof \MyVendor\MyExt\Domain\Model\Products) {
// check if we come to this point
\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump('Successfully hooked - I am a slot.');
die();
}
}
}
-Update 15.06 .2015
Ein Hinweis von Patrick Lobacher bemerkte, dass wir in diesem Zusammenhang nicht sterben() verwenden können. Stattdessen sollten wir eine Logdatei schreiben. Aber das funktioniert auch nicht für mich. Keine Datei geschrieben wurde:
Datei typo3conf/ext/myext/ext_localconf.php
/**
* @var \TYPO3\CMS\Extbase\SignalSlot\Dispatcher $signalSlotDispatcher
* */
$signalSlotDispatcher = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\Object\\ObjectManager')->get('TYPO3\\CMS\\Extbase\\SignalSlot\\Dispatcher');
$signalSlotDispatcher->connect(
'TYPO3\\CMS\\Extbase\\Persistence\\Generic\\Backend',
'afterUpdateObject',
function ($payload) {
$logfile = "fileadmin/test/logfile.txt";
$handle = fopen($logfile, "a+");
fwrite ($handle, 'Hi. I was written by ext_localconf.php. ' . time());
fclose ($handle);
});
-Update 29.06.2015
Auf https://forge.typo3.org/issues/61979 Francois schrieb, dass „Object Manager kann nur im Extbase Context, nicht in ext_localconf.php ". Allerdings funktioniert die gegebene Antwort auch nicht für mich. Aber vielleicht hilft es jemand anderem.
In Bezug auf Hooks, Signale und Slots habe ich vor kurzem eine kurze Anleitung geschrieben: https://usetypo3.com/signals-and-hooks-in-typo3.html – Daniel