Previous Entry В избранное Поделиться Next Entry
Сохранение параметров системы
[info]tovit
Хотелось бы рассказать как я решил проблему сохранения параметров системы для своей CMS -- TEngine (её я пока публично доступной не делаю -- слишком сыра). Описываю свое решение т.к. новички могут искать хоть какие-то способы... а мои поиски в интернете какихто вразумительных ответов не дали.

В системе CodeIgniter есть удобное средство для работы с параметрами -- класс Config.
Как с ним работать -- хорошо изложено в руководстве. Там указывается что можно получать значение и записывать его. НО. Запись работает только для текущей сессии работы скрипта. Возник вполне резонный вопрос -- как как можно удобнее сохранять свои параметры дабы не править текстовый конфиг в ручную и тем более не писать парсер на php'шный конфиг.

Решение нашлось быстро и оказалось элегантно красивым и многофункциональным. О многофункциональности я рассказывать не буду -- здесь уже каждый будет выдумывать сам. А вот саму идею выскажу. В любом случае -- она витает в воздухе...

Я храню все параметры системы (именно своего кода, но не самого фреймвёрка) в БД... Не хочу объяснять выбор этого места хранения -- речь не об этом.
Для их чтения я написал модель, например, myconfig. У которой в конструкторе прописал чтение таблицы параметров из БД (кстати, никто не мешает использовать и файл -- кому что удобней) и запись этих параметров в класс Config. Записал модель в автозагрузку и все. Теперь при загрузке системы параметры автоматически считываются и используются.

В админке, производиться обработка этих параметров. Как их обрабатывать -- каждый решает сам. Там же и можно вызвать дополнительный метод который будет записывать параметры в базу.
Метки: ,

э, немного не понял, а чего хотелось добиться то?

проще имхо тогда хранить в yaml и парсер писать не надо и сохраняется легко в обе стороны, ну а если сессия, так вообще в отдельный класс например вынести и сериализованный хранить его в сессии и всё

Хотелось добиться наглядного конфига. Сейчас эта задумка переделана на сериализованные массивы с опциональным шифрованием...
Изначально просили наглядную структуру конфига, вплоть до ручной правки без админки.

Это просто вариант работы со своими конфигами. В моём варианте, в таблице, для каждого параметра хранилась еще строка пояснения о параметре, которая выводилась в админке, там же хранилась группа к которой относиться параметр -- на этапе разработки в разы удобней хранить все это в БД... а перед релизом чуток видоизменить для работы с файлами...

хм...

ну вот к примеру мой кусок кода конфига от cms на codeigniter



чем не наглядность и простота редактирования без админки, обычные коментарии для наглядности и так же разделение на блоки

а их уже себе и забираем куда и как хотим

$this->config->load('core');
$this->settings['site'] = $this->config->item('site');

$this->settings['theme'] = $this->config->item('theme');

и поехал работать

имхо не стоит вопрос даже каких-то нестандартных решений

а как на счет сохранения? Т.е. когда параметры меняются в админке? Или это не принципиально и конфиг системы полностью правиться в редакторе? Скорее всего написана функция/класс для записи конфига в формате php-кода?

ну обычно же такие конфиги меняются либо в начале установке системы или очень редко, думаю ничего сложного сделать такой же модуль в админке, что выводит этот файл в textarea и сохраняет его вместо старого конфиг файла, зато дальше всё стандартная работа с конфигом от ci

В моем случае, есть структура куда вносятся как сами параметры и их значения, но и строка их описания, категория параметра, значение по умолчанию. Это дает возможность довольно просто при разработке в любом редакторе БД вносить новые параметры и их описания в таблицу. Тогда как в админке, они будут появляться сами автоматически (вместе с чтением таблицы при загрузке системы). КОнфиг читаеться в стандартный CI_Config, т.е. работа в коде с ним стандартная.
После окончания разработки системы, один раз вписывается код который считав весь массив записей из базы серриализует его в файл и переделывается загрузчик конфига. Фактически, меняется строк 10 кода и в результате я получаю хранение конфига в файле. В случае, если нужно добавить параметры или удалить или подправить, комментарии строки работающие с базой, и пересохраняем конфиг из файла в базу, правим, и отправляем обратно в файл.
Мне показалось это вполне приемлемым...

Вы читаете журнал [info]tovit