PHPackages                             4slv/yaml-config - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. 4slv/yaml-config

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

4slv/yaml-config
================

config code generator from yaml config

v1.1.7(7y ago)07731MITPHPPHP &gt;=5.4.0

Since Apr 25Pushed 7y agoCompare

[ Source](https://github.com/4slv/yaml-config)[ Packagist](https://packagist.org/packages/4slv/yaml-config)[ RSS](/packages/4slv-yaml-config/feed)WikiDiscussions master Synced 2mo ago

READMEChangelog (10)Dependencies (3)Versions (21)Used By (0)

yaml\_config
============

[](#yaml_config)

- Модуль позволяет сгенерировать ООП код конфига из 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\ClassCodeGenerator\ConfigClassTreeGenerator;
use YamlConfig\YamlFileToTree;

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

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

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

Интерфейсы
----------

[](#интерфейсы)

помощью модуля есть возможность генерации интерфейсов для классов конфигурации.

1. **Иерархические интерфейсы**. > По структуре yaml соответствуют 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
    > ```
    >
    >
    >
    > Создаст интерфейс на самом верхнем иерархическом уровне:
    >
    > ```
    >
