我希望为自己的扩展创建一个钩子,以便我的另一个扩展可以使用扩展中定义的函数。
有谁知道如何创建一个新的钩子来创建两个扩展之间的通信?
答案 0 :(得分:1)
选择Singal / Slot Pattern。
您可以在代码中发出信号,并注册一个侦听该信号的插槽,以便挂钩进程。
要发出信号,请注入SignalSlotDispatcher:
/**
* @var \TYPO3\CMS\Extbase\SignalSlot\Dispatcher
* @inject
*/
protected $signalSlotDispatcher;
在您的代码中,您可以发出如下信号:
$this->signalSlotDispatcher->dispatch(
__CLASS__,
'MySignalName',
[$param1, $param2, $this]
);
在您的第二个分机中,您可以在ext_localconf.php
中注册一个侦听该信号的插槽:
$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
);
然后在Slot Class中实现mySlotMethod
并完成你的工作。
编辑:我在该主题here上写了一篇更详细的教程。