在TYPO3中创建自己的钩子



我想为我自己的扩展创建一个钩子,这样我的另一个扩展就可以使用扩展中定义的函数。

有人知道如何创建一个新的钩子来创建两个扩展之间的通信吗?

选择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并完成您的工作。


编辑:我在这里写了一个关于这个主题的更详细的教程。

最新更新