Danke. Mit etwas Verspätung habe ich den Artikel mal aktualisiert.
TYPO3: Extbase-Extensions erweitern mit Signal/Slots
Beispiel: Powermail erweitern
Schauen wir uns ein konkretes Beispiel an: die Extension powermail, welche in der aktuellen Version (2.x) extbase verwendet (und somit keine Hooks zulässt). Zunächst erstellen wir eine neue Extension (powermailpdf). In dieser erstellen wir eine Klasse die die Klasse von powermail erweitert, die das zu behandelte Signal beinhaltet und eine Funktion die ausgeführt werden soll, sobald powermail dieses Signal sendet. In unserm Beispiel ist das die Klasse Tx_Powermail_Controller_FormsController und das Signal createActionBeforeRenderView, dieses wird gesendet sobald ein Benutzer ein Formular endgültig abgeschickt hat und eine Bestätigungsseite erscheint.
class Tx_Powermailpdf_Pdf extends Tx_Powermail_Controller_FormsController {
function callMe() {
echo „Läuft“
}
}
Jetzt wissen wir, wann und was wir machen wollen, nämlich „Läuft“ ausgeben wenn die Bestätigungsseite von powermail generiert wird. Jetzt müssen wir nur noch das Signal und den Slot verbinden. Dies wird mit dem SignalSlot Dispatcher (dazu TYPO3-Api Dokumentation) gemacht. In der ext_localconf.php unserer Extension fügen wir dazu Folgendes hinzu:
$signalSlotDispatcher = t3lib_div::makeInstance('Tx_Extbase_SignalSlot_Dispatcher');
$signalSlotDispatcher->connect('Tx_Powermail_Controller_FormsController', 'createActionBeforeRenderView', 'Tx_Powermailpdf_Pdf', 'callMe'
Update Seit TYPO3 6.2 hat sich ein bisschen was geändert (Danke Lukas):
\TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\SignalSlot\\Dispatcher')->connect(
'In2code\\Powermail\\Controller\\FormController',
'createActionBeforeRenderView',
'Tx_Powermailpdf_Pdf',
'callMe'
);
Zum Verständnis des zweiten Zeile: $signalSlotDispatcher->connect ...
connect (
$sinal,
$signalName,
$slotClassNameOrObject,
$slotMethodName = '',
$passSignalInformation = TRUE
)
Jetzt können wir die neue Extension installieren und sobald ein powermail Formular abschickt würde, müsste „Läuft“ ausgebenden werden. All dies kann in der Extension powermailpdf im TER nachvollzogen werden. Die Extension schreibt alle ausgefüllten Felder von powermail in ein PDF und bietet es zum Download an. Dazu wird demnächst noch ein kleiner Artikel erscheinen.
Kommentare
Mal ein Update für Typo3 6.1 und 6.2 mit Extbase
// Name des Signals als Klassenkonstante des emittierenden Controllers setzen
const SIGNAL_BEFORE_REDIRECT = 'beforeRedirect';
// dann, in der controller action. signalSlotDisptacher steht aus den Elternklassen bereits zur verfügung, sonst selbst injecten
$this->signalSlotDispatcher->dispatch(__CLASS__, $hookName, $params);
// aus der ext_localconf.php der implementierenden Extension
\TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\SignalSlot\\Dispatcher')->connect(
'Vendor\\Class\\Of\\The\\Emitting\\Controller',
\Vendor\Class\Of\The\Emitting\Controller::SIGNAL_BEFORE_REDIRECT,
'Vendor\\The\\Implementing\\Class',
'methodToBeCalled'
);
--
ich würde mich freuen, wenn du deinen Beitrag darum ergänzt, da dieses Ergebnis in Google (zu recht) auf platz 1 zu für typo3 signal slot steht.
Deprecated wegen Umstellung auf Namespaces. Konzept bleibt erhalten, aber der Klassenname aendert sich. ;-)
[...] im Artikel TYPO3: Extbase-Extensions erweitern mit Signal/Slots angedeutet sollte noch ein Artikel über die Extension erscheinen die Powermail 2 erweitert: Und [...]
Hmm, da hast Du recht, in der <a href="http://api.typo3.org/extbase/current/" title="Extbase API">Extbase API</a> steht dazu aber nichts. Es sieht so aus als ob das Konzept Signal/Slots weiterhin vorhanden bleib, aber der SignalSlot_Dispatcher raus fliegt. Werde da aber nochmal nachforschen.
in der von euch verlinkten Api-Dokumentation
http://typo3.org/api/typo3cms/class_tx___extbase___signal_slot___dispatcher.html
Danke. Das Signal/Slots als depricated ausgewiesen sind ist mir neu und würde mich auch wundern, da es bei flow intensiv eingesetzt wird. Wo hast du das denn her? In der API Dokumentation von extbase/flow finde ich dazu nichts.
nettest Tutorial! In der Api Dokumentation wird dieses Feature bereits als deprecated ausgewiesen, gibts da schon eine Alternative?