Ho un'estensione Extbase funzionante in TYPO3 V6.2, che memorizza i prodotti. Ora voglio imparare a usare Signal/Slot (variante Extbase di Hooks). Mi chiedo perché l'esempio non funzioni. Quando aggiorno un prodotto nel modulo Elenco nel backend di TYPO3, esso viene salvato correttamente ma non viene visualizzato alcun messaggio.TYPO3 Extbase - come utilizzare il core Signal/Slot
File 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
);
File typo3conf/ext/myext/servizio/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();
}
}
}
Aggiornamento 15.06 .2015
Un accenno di Patrick Lobacher ha osservato che non possiamo usare die() in questo contesto. Invece, dovremmo scrivere un logfile. Ma non funziona nemmeno per me. Nessun file è stato scritto:
File 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);
});
Aggiornamento 29.06.2015
Su https://forge.typo3.org/issues/61979 Francois ha scritto, che "Object Manager può essere usato solo in contesto extbase, non in ext_localconf.php ". Tuttavia, anche la risposta data non funziona per me. Ma forse aiuta qualcun altro.
Per quanto riguarda Hook, Segnali e Slot, di recente ho scritto un breve tutorial: https://usetypo3.com/signals-and-hooks-in-typo3.html – Daniel