在TYPO3中创建自己的钩子

在TYPO3中创建自己的钩子,typo3,hook,Typo3,Hook,我希望为我自己的扩展创建一个钩子,以便我的另一个扩展可以使用扩展中定义的函数 有人知道如何创建一个新的钩子来创建两个扩展之间的通信吗?选择Singal/Slot模式 您可以在代码中发出一个信号,并注册一个侦听该信号的插槽,以便挂接到进程中 要发出信号,注入信号SlotDispatcher: /** * @var \TYPO3\CMS\Extbase\SignalSlot\Dispatcher * @inject */ protected $signalSlotDispatcher; 在您

我希望为我自己的扩展创建一个钩子,以便我的另一个扩展可以使用扩展中定义的函数


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

选择Singal/Slot模式

您可以在代码中发出一个信号,并注册一个侦听该信号的插槽,以便挂接到进程中

要发出信号,注入信号SlotDispatcher:

/**
 * @var \TYPO3\CMS\Extbase\SignalSlot\Dispatcher
 * @inject
 */
protected $signalSlotDispatcher;
在您的代码中,您可以发出如下信号:

$this->signalSlotDispatcher->dispatch(
    __CLASS__,
    'MySignalName',
    [$param1, $param2, $this]
);
在第二个扩展中,您可以注册一个插槽,用于侦听
ext\u 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类中实现
mySlotMethod
,并完成自己的工作



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

你有没有关于你已经看过的地方的参考资料和一些你已经尝试过的例子?注射信号发生器去哪里了?在类中或ext_localconf.phpIn中输入信号所在的类。在ext_emconf中,不能注入。这就是为什么在那里使用Generalutility::makeInstance()初始化Dispatcher。在发出信号代码片段的过程中,MySignalName和[$param1,$param2,$this]是什么?它在动作方法之后、之前或内部的位置?“MySignalName”只是sgnal的一个名称。选择你喜欢的。在注册插槽时再次使用它(请参阅最后一个代码段)。[$param1,$param2,$this]是一个包含一些变量的数组。您可以在这里传递任何您喜欢的内容,以便在\Class\With\Slot::mySlotMethod()中显示。谢谢!这段代码在哪里?$this->signalSlotDispatcher->dispatch(类,'MySignalName',[$param1,$param2,$this]);