Как стать автором
Обновить

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

Теги:
Всего голосов 2: ↑2 и ↓0+4
Комментарии0

Публикации

Истории

Ближайшие события

25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань
20 – 22 июня
Летняя айти-тусовка Summer Merge
Ульяновская область