Mam działające rozszerzenie Extbase w TYPO3 V6.2, które przechowuje Produkty. Teraz chcę się nauczyć o użyciu Signal/Slot (Extbase variant of Hooks). Zastanawiam się, dlaczego ten przykład nie działa. Kiedy aktualizuję produkt w module List w Backend TYPO3, zapisuje się poprawnie, ale nie pojawia się żaden komunikat.TYPO3 Extbase - jak używać rdzenia Signal/Sloty
pliku 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
);
pliku typo3conf/ext/myext/Serwis/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();
}
}
}
Aktualizacja 15.06 .2015
Wskazówka od Patricka Lobachera zauważyła, że nie możemy używać metody die() w tym kontekście. Zamiast tego powinniśmy zapisać plik dziennika. Ale to też nie działa dla mnie. No plik został napisany:
pliku 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);
});
Aktualizacja 29.06.2015
Na https://forge.typo3.org/issues/61979 Francois napisał, że „Menedżer obiekt może używaj tylko w kontekście Extbase, a nie w ext_localconf.php ". Jednak podana odpowiedź nawet nie działa dla mnie. Ale może to pomaga komuś innemu.
Jeśli chodzi o haki, sygnały i gniazda, niedawno napisałem krótki samouczek: https://usetypo3.com/signals-and-hooks-in-typo3.html – Daniel