我想为我自己的扩展创建一个钩子,这样我的另一个扩展就可以使用扩展中定义的函数。
有人知道如何创建一个新的钩子来创建两个扩展之间的通信吗?
选择Singal/Slot模式。
您可以在代码中发出一个信号,并注册一个侦听该信号的插槽以挂接到进程中。
要发射信号,请注入SignalSlotDispatcher:
/**
* @var TYPO3CMSExtbaseSignalSlotDispatcher
* @inject
*/
protected $signalSlotDispatcher;
在你的代码中,你可以发出这样的信号:
$this->signalSlotDispatcher->dispatch(
__CLASS__,
'MySignalName',
[$param1, $param2, $this]
);
在您的第二个扩展中,您可以在ext_localconf.php
:中注册一个侦听该信号的插槽
$signalSlotDispatcher = TYPO3CMSCoreUtility
GeneralUtility::makeInstance(TYPO3CMSExtbaseSignalSlotDispatcher::class);
$signalSlotDispatcher->connect(
YourClassWithTheSignal::class,
'MySignalName',
YourClassWithTheSlot::class,
'mySlotMethod',
false
);
然后在Slot类中实现mySlotMethod
并完成您的工作。
编辑:我在这里写了一个关于这个主题的更详细的教程。