Artem
Не-не...
ну давайте разбираться...
Sonkin
🫤
Sonkin
Ну я же всё это выкосил сначала!
Sonkin
Ёптиль...
Artem
Ну я же всё это выкосил сначала!
У меня лыжи почему-то не едут!
Artem
Т.е. вы вырезали код обработки статей плагинами, а потом героически пытались справиться с тем, что статьи перестали обрабатываться плагинами?
Artem
Получается так. Если вкратце.
Кружку пива этому господину! Он настоящий айтишник!
Sonkin
Зато на 6-й версии править не надо будет. Плюс же какой-нибудь должен быть в этом всём.
Artem
Знаете, сколько лет уже висит в deprecated угроза удаления методов getError и setError у CMSObject?
Artem
12!
Artem
Знаете, сколько лет уже висит в deprecated угроза удаления методов getError и setError у CMSObject?
сначала обещали удалить в 3.какой-то, потом в 4, потом в 5, потом в 5.1, потом в 6 Сейчас, в репозиории 6, код ещё на месте. И я сильно сомневаюсь, что поменяется что-то, кроме угрозы удалить в 7
Sonkin
Теперь знаю. В смысле вообще всё было зря с этими триггерэвентами?
Artem
А как же преобретённый опыт?
Artem
Теперь знаю. В смысле вообще всё было зря с этими триггерэвентами?
А вообще, можно попробовать это всё дело, в иде PR отправить на github
Artem
возможно, даже такое использование event'ов поможет перейти на использование EventDispatcher и отбросить старый triggerEvent
Artem
тут же весь прикол в том, что контентные плагины, по своей логике, вообще никак не адаптированы к реализации с Event'ами. Чтобы перевести эти события на адекватные Event'ы нужно все плагины переделать
Sonkin
нужно будет переписать абсолютно все плагины контентные. И там не просто аргументы поправить. Там прям логику поменять нужно
Artem
И там не просто аргументы поменять. Там прям в логику вносить изменения придётся
Artem
руки крюки у меня
Sonkin
У меня вот руки быстрее головы. Сижу всё и думаю: какой я «незаменимый опыт», блин, получил. Несколько человек ещё успел напрячь. На JoomlaForum была какая-то страничка юмора, туда чтоль написать историю? )
Artem
Там сам объект ещё устаревший 😀
Они его передумали убирать
Igor
Они его передумали убирать
Уже передумали ну ладна
Artem
Его сделали устаревшим из-за того, что в PHP 9 запрещено динамически добавлять свойства объекту А потом выяснилось, что если добавить атрибут #[\AllowDynamicProperties], то можно ...
Artem
Поэтому ещё 10 лет будем жить с LegacyErrorHandlingTrait и LegacyPropertyManagementTrait =)
Artem
К стати. Тем кто пишет свои event'ы Может кто-то не знал...? При вызове метода setArgument() будет автоматически вызван метод onSet{$argumentName} Таким образом можно внедрить строгую типизацию аргументов для Event
Igor
К стати. Тем кто пишет свои event'ы Может кто-то не знал...? При вызове метода setArgument() будет автоматически вызван метод onSet{$argumentName} Таким образом можно внедрить строгую типизацию аргументов для Event
Да это понятно, но вот только тебе помняют те агрументы которые не нужно. Это раз. А во вторых вопрос в том что при большом кол-ве ивентов это тупо не удобно
Igor
В RM уже навреное больше 30 событий. Большая часть из которых с reference аргументами. Я грхонусь для каждого писать класс с логикой и защитой того что трогать не должны
Igor
в смысле?
Ты можешь менять любой аргумент ивента
Igor
через setArgument
Igor
что может не только сломать следующие плагины, но и повляет на выполнене скрипта после ивента. Надо очень четко указывать что можно ставить что нельзя и обрабатывать результат после каждого срабатывания.
Artem
Ты можешь менять любой аргумент ивента
Ну смотри. Во-первых, это удобно для изменяемых event'ов, т.к. ты будешь точно уверен в том, что тебе event запишут аргумент с тем же типом, что ты изначально задумывал
Artem
ну а чтоб не лазили вообще - есть ImmutableEvent В фреймворке и cms у ImmutableEvent есть проблема - он нихера не ImmutableEvent. У себя я его расширил и закрыл запись. Надеюсь получится расшевелить сообщество на то, чтобы и в ядре его закрыли на запись адекватно
Igor
упаду нахер в ошибку
То же самое будет и без Event
Artem
без Event на много удобнее типизировать было
Igor
ну да
О том и реч. Да это круто. Если у тебя 3 ивента. Но когда 30+ а у кого-то их под 100 это того не стоит
Artem
Но у нас теперь всё на event'ах и приходится как-то жить в этой реальности
Igor
И встречал чо не я один такой
Igor
я туда кстати провеку на смену типа могу добавить =)
Artem
У вас. Я свой обработчик написал и в ус не дую =)
это я знаю. Но я вот сделать всё прям по канонам решил. Приходится иногда выкручиваться, потому что каноны переписываются раз в год и хер ты в них нормально попадёшь =)
Artem
вам привет от симфонистов =)
Там, помимо миллиарда евентов, ещё и каждый контроллер нужно в контейнере ручками зарегистировать и к нему все аргументы прописать
Artem
в джумле это выглядело бы, как создание сервиспровайдера для каждого контроллера
Artem
воть
Artem
и конструктор контроллера
Igor
и конструктор контроллера
И. Это удобно и здраво и проще чем контролер который тянет то что не нужно
Artem
И. Это удобно и здраво и проще чем контролер который тянет то что не нужно
ну как тебе сказать... Вот компонент на 12 контроллеров. Я затрахаюсь писать это всё через контейнер
Artem
как бы джумла и симфония - это 2 крайности на разных чашах весов
Sergey
Добавление своих команд для CLI в Joomla 4 и Joomla 5 с помощью плагина В Joomla, как и во многих других PHP фреймворках и движках, уже довольно давно (с версий 1.7.x) существует возможность работы с помощью CLI. С его помощью обычно решают те задачи, решение которых в веб-интерфейсе Joomla нецелесообразно из-за возможных ограничений веб-сервера - так называемые "тяжелые" задачи. Это может быть миграция большого количества контента со старой версии Joomla на новую, синхронизация данных с внешним источником по API (синхронизация цен и остатков, выгрузка заказов), работа с файлами и каталогами, выполнение пакетных заданий на больших объёмах и т.д. - всё то, что может занимать много времени и ресурсов сервера. Как добавить свою команду в CLI интерфейс Joomla расскажет эта статья. Читать статью #разработка
Igor
ну как тебе сказать... Вот компонент на 12 контроллеров. Я затрахаюсь писать это всё через контейнер
Понимаешь, одно дело когда тебе надо сделать 12 контролеров для себя. Другое дело когда ты делаешь события для тех кто будет это расширять
Artem
и конструктор контроллера
это бандл для тех, кто будет это расширять....
Igor
Вопрос стоит не только в том что, но для кого и где. К тому же если командны на создание контролеров.
Igor
это бандл для тех, кто будет это расширять....
Не будет. Ты делаешь сайт на фрейме а не расширение на joomla
Artem
Не будет. Ты делаешь сайт на фрейме а не расширение на joomla
я тебе привожу пример из бандла для симфонии, что является аналогом расширения для joomla
Igor
и конструктор контроллера
И кстати контролер j5 не намного меньше =) просто ты его расширяешь родным контролером а не пишешь констракт. Так же ты можешь и в симфонии сделать
Artem
И кстати контролер j5 не намного меньше =) просто ты его расширяешь родным контролером а не пишешь констракт. Так же ты можешь и в симфонии сделать
Разница в том, что по логике джумлы все зависимости для контроллера будут установлены в MVCFactory на основании списка интерфейсов, после инициализации класса В симфонии ты все зависимости готовишь на стадии инициализации.
Artem
И я не заметил, чтоб у j прям так раздувался контроллер (хотя ничто не мешает мне это сделать)
Igor
Ладно все это весело, но мне пора обратно в математику =)
Sergey
Добавление своих команд для CLI в Joomla 4 и Joomla 5 с помощью плагина В Joomla, как и во многих других PHP фреймворках и движках, уже довольно давно (с версий 1.7.x) существует возможность работы с помощью CLI. С его помощью обычно решают те задачи, решение которых в веб-интерфейсе Joomla нецелесообразно из-за возможных ограничений веб-сервера - так называемые "тяжелые" задачи. Это может быть миграция большого количества контента со старой версии Joomla на новую, синхронизация данных с внешним источником по API (синхронизация цен и остатков, выгрузка заказов), работа с файлами и каталогами, выполнение пакетных заданий на больших объёмах и т.д. - всё то, что может занимать много времени и ресурсов сервера. Как добавить свою команду в CLI интерфейс Joomla расскажет эта статья. Читать статью #разработка
Народ, как время будет - гляньте статью. Вдруг где косяк какой.
Igor
Народ, как время будет - гляньте статью. Вдруг где косяк какой.
Ну я провайдер теперь делаю так. /** * Registers the service provider with a DI container. * * @param Container $container The DI container. * * @since 1.0.0 */ public function register(Container $container) { // Register MVCFactory $container->registerServiceProvider(new MVCFactory('Joomla\\Component\\RadicalMart')); $container->set(PluginInterface::class, function (Container $container) { // Create plugin class $subject = $container->get(DispatcherInterface::class); $config = (array) PluginHelper::getPlugin('system', 'radicalmart'); $plugin = new RadicalMart($subject, $config); // Set application $app = Factory::getApplication(); $plugin->setApplication($app); // Set database $db = $container->get(DatabaseDriver::class); $plugin->setDatabase($db); // Set MVCFactory $mvcFactory = $container->get(MVCFactoryInterface::class); $plugin->setMVCFactory($mvcFactory); // Load component language $app->getLanguage()->load('com_radicalmart', JPATH_ADMINISTRATOR); return $plugin; } ); } В j5 есть еще setLanguage но у меня и для l4 так что я его не юзаю. Так же я просто добалвяю команды прямо в app не в контейнер.
Sergey
В четверке такое тоже работает?
Igor
В четверке такое тоже работает?
$this->getApplication()->addCommand($command);
Igor
И просто класс