Новая структура конфигурационных файлов 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 последних необязательны:

  1. $filepath - относительный путь к файлу конфигурации, отсчитывается от директории application/configs/[dist или local]/

  2. $useCache - использовать кэш рантайма, если конфигурация уже открывлась в рамках текущего запроса

  3. $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();