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