x5hell/yaml-config

config code generator from yaml config

v1.0.0 2018-04-22 14:02 UTC

This package is not auto-updated.

Last update: 2024-04-23 02:26:12 UTC


README

  • Модуль позволяет сгенерировать ООП код конфига из yaml-файла.

Например, из yaml-файла:

family: # семья
  father: # отец
    name: Bob # имя
    hobby: # хобби
      - sport # спорт
      - boardgames # настольные игры
    story: | # биография
      родился в Бафало: # место рождения
      учился в церковно-приходской школе
  doter: # дочь
    name: Mila # имя
    age: # возраст
      '2017-04-17': 0
      '2018-04-17': 1
      '2019-04-17': 2
  • модуль сгенерирует php-код, который, будет позволять обращаться к значениям конфига в ООП-стиле:
$config = new Config($date);
$fatherName = $config
    ->getFamily()
    ->getFather()
    ->getName();

Переменная $fatherName будет содержать значение Bob.

  • Модуль позволяет создавать свойства с ограниченным сроком действия, например, в вышеуказанном yaml-файле обращение к свойству family.doter.age будет зависеть от переданной в конструктор даты:
$dateList = [
    '2018-04-17',
    '2019-09-12',
    '2017-09-01'
];
foreach($dateList as $date){
    $dateTime = new DateTime($date);
    $config = new Config($dateTime);
    $doterAgeList[] = $config
        ->getFamily()
        ->getDoter()
        ->getAge();
}

Переменная $doterAgeList содержит массив: [1,2,0]

  • Создаваемый модулем php-код будет содержать phpDoc-комментарии, соответствующие комментариям в yaml-файле

Как использовать

use YamlConfig\CodeGenerator\ConfigGenerator;

$configGenerator = new ConfigGenerator();
$configGenerator
    ->setProjectPath($rootDir) // путь к папке проекта
    ->setConfigRelativePath($organizationsRelativePath) // относительный путь расположения yaml-файл с настройками
    ->setConfigCodeRelativePath($organizationsCodeRelativePath) // относительный путь к папке в которой будут сгенерирован код конфига
    ->setConfigName('Family') // название класса конфига
    ->setConfigNamespace('Config\Family') // пространство имён конфига
    ->generate(); // Генерация кода конфига

Особенности функции generate:

  1. Если изменений в исходном конфиге (по сравнению со сгенерированным кодом) нет, то перегенерация не происходит.
  2. В качестве необязательного параметра generate принимает функцию, которая будет вызвана после генерации кода.