Свой класс события для плагинов Joomla. Продолжение.
Продолжение потому, что начало уже было в статье Виталия Некрасова на Хабре.
Кратко.
В Joomla 5+ для событий аргументы упаковываются в собственные классы событий: ContentPrepareEvent
, AfterSaveEvent
и т.д. Данные из них мы получаем в виде $event->getArgument('argument_name')
или [$var, $var2] = array_values($event->getArguments());
. Также для разных типов событий могут быть специфичные методы типа $article = $event->getItem();
в ContentPrepareEvent
и т.д. И в статье Виталия как раз об этом рассказывается.
А так же рассказывается о методах onGet
и onSet
. В ядре Joomla в классе \Joomla\CMS\Event\AbstractEvent
сказано:
/**
* Add argument to event.
* It will use a pre-processing method if one exists. The method has the signature:
*
* onSet($value): mixed
*
* where:
*
* $value is the value being set by the user
* It returns the value to return to set in the $arguments array of the event.
*
* @param string $name Argument name.
* @param mixed $value Value.
*
* @return $this
*
* @since 4.0.0
*/
Добрался я тоже до своего класса события для плагинов, порылся в ядре и подумал, что onSet...
и onGet...
методы не обязательно делать (хотя в статье по ссылке об этом не упоминается). Это методы для "предварительных проверок и манипуляций" с данными перед тем, как они будут отданы через getArgument()
или get<ArgumentName>
. Метод getData()
отдаст данные, которые предварительно будут обработаны методом onGetData()
. Но обработаны они будут только в том случае, если метод реализован. Если нет, то ничего страшного. Ошибки не будет.😎
Эти методы напоминают своеобразные плагины внутри плагинов. На мой взгляд излишнее усложнение, хотя сеттеры и геттеры должны заниматься по идее только сеттерством и геттерством, а проверку/ приведение типов можно отдать в методы onSet...
/ onGet....