Заменяем устаревший метод CMSApplicationInterface::triggerEvent в Joomla 5.1.4.
Рассмотрим решение на примере события onContentPrepareForm
. Раньше вызов выглядел следующим образом:
<?php
$app->triggerEvent('onContentPrepareForm', [$form, $data]);
А теперь документация подсказывает что данный метод устарел в 4.0 и будет удалён в 6.0. И предлагает следующий код:
<?php
Factory::getApplication()->getDispatcher()->dispatch($eventName, $event);
Очевидно что первый параметр метода dispatch - имя события.
А со вторым немного сложнее, теперь событие - это объект.
Создание объекта события
Joomla\CMS\Event\AbstractEvent::create($eventName, $arguments)
$eventName
- имя события
$arguments
- ассоциативный массив аргументов (aргумент subject
- обязательный).
Класс объекта события
Для событий ядра AbstractEvent::create
вернёт объект класса, соответствующий имени события (полный список вы найдёте в файле libraries/src/Event/CoreEventAware.php
).
Для событий сторонних расширений будет создан объект класса Joomla\CMS\Event\GenericEvent
.
В аргументе eventClass
вы можете указать имя своего собственного класса события.
Пример вызова события onContentPrepareForm:
<?php
/** @var \Joomla\CMS\Event\Model\PrepareFormEvent $event */
$event = AbstractEvent::create(
'onContentPrepareForm',
// важно соблюдать порядок аргументов, для совместимости со старыми плагинами
[
'subject' => $form,
'data' => $data
]
);
$app->getDispatcher()->dispatch($event->getName(), $event);