config/config.php и модульность

Правила раздела: faq.php?mode=okay
Модератор: Модераторы

korshunov
korshunov
Репутация: 146
Сообщения: 1854
Зарегистрирован: 03.12.2015
С нами: 8 лет 3 месяца
Skype

Сообщение #1 korshunov » 10.02.2021, 09:46

Обнаружилась забавная картина.

Допустим, пользователь добыл и скопировал два модуля (M1 и M2), у которых в config/config.php присутствует один и тот же параметр
M1. module_config_variable = 5
M2. module_config_variable = 7

Если установить M1 все в порядке. Если затем установить M2, то получите белый экран!

Представьте, что будет дальше. Пользователь начнем теребить второго разработчика (Р2). А тот отвечает, что все отлично работает. На форуме другие пользователи, тоже ответят, что M2 у них работает.

Через время подключит пользователь debug_mode, прочтет
Fatal error: Uncaught Exception: Duplicate parameter "module_config_variable" in...

Уже станет чуть-чуть понятно, куда копать. Далеко не сразу, но выяснится, что имеется конфликт в двух модулях.

Что дальше? Просить разработчика М1 (Р1), чтоб поправил переменную, чтоб было не как у Р2? Или просить об аналогичном Р2? Если повезет, Р1 пойдет навстречу и изменит. А потом вдруг окажется, что совпадение с Р3...

В то же время, если в штатном config/config.php вставить
config_variable = 8
config_variable = 9
две строки с одинаковыми переменными, то фатального белого экрана не возникает.

Такие вот дела с передовой ООП-разработкой...

zyxer M
zyxer M
Возраст: 32
Репутация: 77
Сообщения: 419
Зарегистрирован: 03.02.2016
С нами: 8 лет 1 месяц
Откуда: Днепр

Сообщение #2 zyxer » 10.02.2021, 10:30

По вашему лучше если один модуль в тихую переопределит директиву конфига другого модуля и это может вылезть ай как больно )
Вообще, когда вы пишите свой модуль, лучше (я думаю это очевидно) называть директивы конфига как-то уникально, чтобы уменьшить вероятность пересечения её с директивами других модулей.

Через время подключит пользователь debug_mode, прочтет
Если уже и видите "белый экран" думаю логично сразу смотреть логи. На то они и логи, чтобы понимать что пошло не так. Ранее мы выводили сообщение об ошибке, но сейчас пишем в лог, а выводим только если включен debug_mode

Но мы чуть переделали в новой версии, чтобы можно было директиву из конфига модуля переопределять в config/config.local.php

Такие вот дела с передовой ООП-разработкой...
это высказывание не имеет никакого смысла, т.к. дело не в ООП, а если посмотреть в Okay\Core\Config::loadConfigsFrom() то мы там явно кидаем исключение. Это говорит что так и задумывалось.
Всё сказанное мной, является лично моим мнением, и не является официальной позицией OkayCMS

korshunov
korshunov
Репутация: 146
Сообщения: 1854
Зарегистрирован: 03.12.2015
С нами: 8 лет 3 месяца
Skype

Сообщение #3 korshunov » 18.02.2021, 13:14

zyxer писал(а):По вашему лучше если один модуль в тихую переопределит директиву конфига другого модуля и это может вылезть ай как больно )

Вы совершенно правы, в тихую не стоит. Но, по-моему, стоило бы в такой ситуации выдавать некоторое предупреждение, более понятное простому пользователю.

Еще похожая ситуация. Если модуль при установке пытается создать таблицу и запрос на создание дает ошибку (например, таблица с таким именем уже есть), то как раз и произойдет случай "в тихую" - внешне все как будто нормально, ошибок не видно, но реально таблица не создана. Следы неудачного запроса можно увидеть в логе, но кто ж туда каждую минуту смотрит?

А если модулю надо добавить поле в стандартную таблицу, а поле с таким именем уже существует, то он смело "в тихую" меняет свойства поля на нужные ему, и в логе никаких следов не оставляет. Тут возможны даже потери данных...

zyxer M
zyxer M
Возраст: 32
Репутация: 77
Сообщения: 419
Зарегистрирован: 03.02.2016
С нами: 8 лет 1 месяц
Откуда: Днепр

Сообщение #4 zyxer » 18.02.2021, 13:38

Поставим задачу в бэклог просмотреть еще раз этот момент и подумать какие там могут быть нюансы и их решения.

Мы в данный момент кидаем Exception, который либо в лог пишется либо на вывод отдается. Как можно сделать более понятно?
Всё сказанное мной, является лично моим мнением, и не является официальной позицией OkayCMS

makki M
makki M
Репутация: 199
Сообщения: 697
Зарегистрирован: 12.08.2016
С нами: 7 лет 7 месяцев
Откуда: Киев
Сайт

Сообщение #5 makki » 18.02.2021, 16:09

Еще одна проблема с таблицами БД и головная боль для программиста, что модулем создаются новые таблицы, а после отключения (удаления) модуля, всеравно остаются.
Cоздание и расширение функционала интернет-магазина на платформе OkayCMS 2 (с 3-й и 4-й версией не работаю)

zyxer M
zyxer M
Возраст: 32
Репутация: 77
Сообщения: 419
Зарегистрирован: 03.02.2016
С нами: 8 лет 1 месяц
Откуда: Днепр

Сообщение #6 zyxer » 18.02.2021, 16:33

тут думаю будет больше головняка если кто-то удалит модуль и удалятся все данные которые были ранее заполнены. Мы много думали об этом, но кажется лучше, если это нужно будет, вичищать руками. Но также есть мысл таки сделать метод в Init-е delete() который будет отрабатывать при удалении модуля, и туда разработчик будет добавлять что посчитает нужным
Всё сказанное мной, является лично моим мнением, и не является официальной позицией OkayCMS


Название раздела: Баг-репорт OkayCMS (Сообщения об ошибках)
Правила раздела: faq.php?mode=okay

Быстрый ответ


Введите код в точности так, как вы его видите. Регистр символов не имеет значения.
Код подтверждения

   

Вернуться в «Баг-репорт OkayCMS (Сообщения об ошибках)»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 11 гостей