Новая структура конфигурационных файлов DVelum 1.x
Полностью переработана система управления конфигурациями проекта. Работа с файлами настроек стала намного комфортнее.
Теперь пользовательские и системные конфигурации разделены по папкам:
- application/configs/dist - настройки по умолчанию из дистрибутива
- application/configs/local - локальные настройки
Пользователь может доопределять или полностью переопределять системные настройки, для этого достаточно создать одноименный файл в папке application/configs/local более того доопределение может быть каскадным (несколько файлов в цепочке)
За работу с настройками теперь отвечает Config::storage() (класс Config_Storage)
Получение настроек
было:
$configMain = Registry::get('main' , 'config');
$storageConfig = Config::factory(Config::File_Array, $configMain->get('configs').'/filestorage.php');
стало:
$storageConfig = Config::storage()->get('filestorage.php');
Config::storage()->get($filepath, $useCache, $merge) может принимать 3 параметра, 2 последних необязательны:
-
$filepath - относительный путь к файлу конфигурации, отсчитывается от директории application/configs/[dist или local]/
-
$useCache - использовать кэш рантайма, если конфигурация уже открывлась в рамках текущего запроса
-
$merge - флаг, по умолчанию true - объеденять конфигурации, т.е взять dist/myconfig.php наложить на него значение local/myconfig.php. Если установлен флаг false, то берется конфигурация из последнего существующего в цепочке подключения файла, например только local/myconfig.php Данный параметр необходим для полного переопределения кофигурации (удаление ненужных свойств)
Переопределение стандартной конфигурации
Допустим разработчик хочет включить кэширование (основнй файл конфигурации application/configs/dist/main.php)
Для этого можно создать файл application/configs/local/main.php следующего содержания:
<?php
return [
'use_cache' => true
];
В процессе разработки DVelum сохраняет конфигурации в каталог application/configs/local/ таким образом ваши проекты, объекты ORM отделены от дистрибутива.
Цепочки конфигураций
Конфигурации подключаются по цепочке, которая описана в настройках хранилища application/configs/dist/config_storage.php
return [
'file_array'=>[
'paths' => [
'./application/configs/dist/',
'./application/configs/local/'
],
'write' => './application/configs/local/',
'apply_to' => './application/configs/dist/'
],
'debug'=>false
);
где:
paths - список директорий по очередности загрузки, можно добавлять свои (например для стороннего компонента)
write - директория в которую будет производиться сохранение новых/обновленных конфигураций
apply_to - папка из которой будут браться конфигурации для доопределения при сохранении. Если мы сохраняем обновленную конфигурацию, которая существует в указанной папке, то в папку write будет записан файл содержащий только измененные ключи
Пример. Имеем цепочку:
'paths' => [
'./application/configs/dist/',
'./application/configs/vendor/',
'./application/configs/local/'
]
В этом случае, порядок получения конфигурации следующий: система откроет ./application/configs/dist/[someconfig.php], далее наложит на него ./application/configs/vendor/[someconfig.php],
далее наложит на него ./application/configs/local/[someconfig.php]
При этом файл ./application/configs/vendor/[someconfig.php] может не существовать, в этом случае система пропустит этот шаг.
Подобным образом осуществляется работа с локализациями, только через отдельное хранилище Lang::storage();