TYPO3 9: Signal in einer Extension einbauen

Oftmals schreibt man eine eigene Extension, die dann bei einem Projekt zum Einsatz kommen soll, dafür aber leicht modifiziert werden müsste. Damit die eigene Extension erweiterbar bleibt, sollte man diese selbst ja eigentlich nicht anfassen. Konkret gibt es in meiner Extension im FooController eine Funktion isSomeCheck, die für ein spezielles Projekt verändert werden muss. Eigentlich prüft sie nur ein is_array, ich brauche aber eine weitere Überprüfung:

protected function isSomeCheck ($data) {
$isCheck = in_array($data, $this->checkData);
return $isCheck;
}

Damit man nicht die ganze Extension oder zumindest den Controller neu schreiben muss, wenn sich eigentlich nur eine Kleinigkeit ändert, gibt es Signals.

In isSomeCheck wird also ein Signal dispatched:

protected function isSomeCheck ($data) {
	$isCheck = in_array($data, $this->checkData);
	$signalSlotDispatcher = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Extbase\SignalSlot\Dispatcher::class);
    $isCheck = $signalSlotDispatcher->dispatch('Ophi\\OphiSomeext\\Controller\\FooController', 'isSomeCheck', ['isCheck' => $isCheck]);
	return $isCheck;
}

In einer anderen Extension in der ext_localconf.php kann ich dieses Signal nun nutzen:

/** @var \TYPO3\CMS\Extbase\SignalSlot\Dispatcher $signalSlotDispatcher */
$signalSlotDispatcher = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\SignalSlot\\Dispatcher');
$signalSlotDispatcher->connect(
    'Ophi\\OphiSomeext\\Controller\\FooController',
    'isSomeCheck',
    Ophi\OphiExt\Slots\SomeSlot::class, 
    'isSomeCheckSlot', 
    TRUE
);

Und in der neu erstellten SomeSlot.php sieht das dann so aus:

namespace Ophi\OphiTemplate\Slots;

class SomeSlot
{
    public function isSomeCheckSlot($isCheck)
    {
        //do some more modification
        return ['isCheck' => false];
    }
}

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.