2016-03-22 2 views
1

Я ищу, чтобы создать крючок для моего собственного расширения, так что одно из моих других расширений может использовать функцию, определенную в расширении.Создание собственного крюка в TYPO3

Кто-нибудь знает, как создать новый крюк для создания связи между двумя расширениями?

+1

У вас есть ссылки на то, где вы уже посмотрели, и некоторые примеры того, что вы пробовали? – gmaniac

ответ

1

Перейти к шаблону Singal/Slot.

Вы можете испустить сигнал в коде и зарегистрировать слот, который прослушивает этот сигнал, чтобы подключиться к процессу.

Чтобы излучать сигнал, впрыснуть SignalSlotDispatcher:

/** 
* @var \TYPO3\CMS\Extbase\SignalSlot\Dispatcher 
* @inject 
*/ 
protected $signalSlotDispatcher; 

И в своем коде вы можете излучать сигнал, как это:

$this->signalSlotDispatcher->dispatch(
    __CLASS__, 
    'MySignalName', 
    [$param1, $param2, $this] 
); 

В Вашем 2 расширения вы можете зарегистрировать слот, который прослушивает , что сигнал в вашем 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 
); 

Тогда вы реализуете mySlotMethod в слот-классе и сделайте свой материал.


EDIT: я написал более подробный учебник по этой теме here.

+0

где вводится сигнал SignalSlotDispatcher? в классе или в ext_localconf.php – forethought

+0

В классе, в котором вы передаете сигнал. В ext_emconf вы не можете вводить. Вот почему Dispatcher инициализируется с помощью функции Generalutility :: makeInstance(). – Daniel

+0

в испускании фрагмента кода сигнала, что такое MySignalName и [$ param1, $ param2, $ this]? где он идет после метода действия или до или внутри? – forethought