在TYPO3中创建一个自己的钩子

时间:2016-03-22 14:08:15

标签: typo3 hook

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

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

1 个答案:

答案 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上写了一篇更详细的教程。