Заменяем устаревший метод 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);