2016-03-22 14 views
1

Ich suche einen Hook für meine eigene Erweiterung, so dass eine meiner anderen Erweiterungen die in der Erweiterung definierte Funktion verwenden kann.Erstellen eines eigenen Hooks in TYPO3

Kann jemand einen neuen Haken für die Schaffung der Kommunikation zwischen zwei Erweiterung schaffen?

+1

Haben Sie irgendwelche Referenzen wo Sie schon hingeschaut haben und einige Beispiele dafür, was Sie probiert haben? – gmaniac

Antwort

1

Gehen Sie für das Singal/Slot-Muster.

Sie können ein Signal in Ihrem Code ausgeben und einen Slot registrieren, der dieses Signal abhört, um sich in den Prozess einzuklinken.

ein Signal auszusenden, injizieren die SignalSlotDispatcher:

/** 
* @var \TYPO3\CMS\Extbase\SignalSlot\Dispatcher 
* @inject 
*/ 
protected $signalSlotDispatcher; 

Und in Ihrem Code können Sie das Signal wie folgt emittieren:

$this->signalSlotDispatcher->dispatch(
    __CLASS__, 
    'MySignalName', 
    [$param1, $param2, $this] 
); 

In Ihrem zweiten Erweiterung können Sie einen Schlitz registrieren, der zuhört ein, die in Ihrem ext_localconf.php Signal:

$signalSlotDispatcher = \TYPO3\CMS\Core\Utility 
\GeneralUtility::makeInstance(TYPO3\CMS\Extbase\SignalSlot\Dispatcher::class); 
$signalSlotDispatcher->connect(
    \Your\Class\With\The\Signal::class, 
    'MySignalName', 
    Your\Class\With\The\Slot::class,  
    'mySlotMethod', 
    false 
); 

Dann implementieren Sie 012.in der Slot-Klasse und mach deine Sachen.


EDIT: Ich schrieb eine ausführliche Anleitung zu diesem Thema here.

+0

Wohin geht der SignalSlotDispatcher? in der Klasse oder in ext_localconf.php – forethought

+0

In der Klasse, in der Sie das Signal emittieren. In ext_emconf kannst du nicht injizieren. Deshalb wird der Dispatcher dort mit Generalutility :: makeInstance() initialisiert. – Daniel

+0

in der das Signal Code-Snippet ausgibt, was ist MySignalName und [$ param1, $ param2, $ this]? wo geht es nach der aktionsmethode oder vor oder nach innen? – forethought

Verwandte Themen