PHPackages                             iamsalnikov/config-builder - 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. iamsalnikov/config-builder

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

iamsalnikov/config-builder
==========================

Config Builder

26[1 issues](https://github.com/iamsalnikov/config-builder/issues)PHP

Since Jul 13Pushed 8y ago1 watchersCompare

[ Source](https://github.com/iamsalnikov/config-builder)[ Packagist](https://packagist.org/packages/iamsalnikov/config-builder)[ RSS](/packages/iamsalnikov-config-builder/feed)WikiDiscussions master Synced 2d ago

READMEChangelogDependenciesVersions (1)Used By (0)

Config builder
==============

[](#config-builder)

[![Build Status](https://camo.githubusercontent.com/b4fdbe0c913e9a3f87ff2093acdd763906f8ac3535c037f74c04da6b3dc20070/68747470733a2f2f7472617669732d63692e6f72672f69616d73616c6e696b6f762f636f6e6669672d6275696c6465722e7376673f6272616e63683d6d6173746572)](https://travis-ci.org/iamsalnikov/config-builder)

Библиотека предназначена для сборки конфгов.

1. Установка
------------

[](#1-установка)

```
composer require iamsalnikov/config-builder

```

2. Использование
----------------

[](#2-использование)

Определим базовые понятия:

1. PlaceholderProcessor - это компонент, который находит шаблоны в файле, который нужно собрать. Также этот компонент производит замену шаблона на конкретное значение
2. ValueProvider - это компонент, который отдает то или иное значение для запрашиваемого шаблона.

### 2.1. Конфиг

[](#21-конфиг)

Перед началом работы нужно сконфигурировать билдер таким образом, чтобы он знал, как извлекать шаблоны, где брать значения для этих шаблонов. Пример файла конфигурации (`config_builder.yaml`):

```
# Определяем обработчики шаблонов. Их может быть несколько
placeholder_processors:
  # Просто имя, ничего не значит
  Basic:
    # Класс обработчика. Можно определить свой (об этом будет рассказано ниже)
    class: iamsalnikov\ConfigBuilder\PlaceholderProcessors\BasicProcessor
    # Список аргументов для конструктора обработчика. В данном примере
    # первый аргумент - левая граница плейсхолдера
    # второй аргумент - правая граница плейсхолдера
    arguments:
      - "{{"
      - "}}"

# Определим провайдеры значений для плейсхолдеров (все будут описаны ниже)
# Значения получаем из провайдеров, определенных по порядку. Если в первом провайдере
# значение не найдено, то попробуем его найти в следующем. И так до самого конца списка
# провайдеров
value_providers:
  # Просто имя, ничего не значит
  YamlProvider:
    # Класс провайдера. Можно определить свой (об этом будет рассказано ниже)
    class: iamsalnikov\ConfigBuilder\ValueProviders\Yaml
    # Список аргументов для конструктора провайдера. В данном случае - путь до файла со значениями
    arguments:
      - /var/www/placeholders/data.yaml

  Environment:
    class: iamsalnikov\ConfigBuilder\ValueProviders\Environment
    arguments:
      - PRF_
```

### 2.2. Запуск

[](#22-запуск)

Для запуска нужно выполнить команду:

```
vendor/bin/config_builder path/to/config.php

```

В данном случае будет произведена попытка найти файл конфигурации билдера (`config_builder.yaml`) в текущей активной директории пользоваля. После чего будет прочитан файл `path/to/config.php` и в нем будут заменены все плейсхолдеры на значения из источников.

В том случае, если конфиг для билдера лежит в каком-то другом месте, можно передать путь до конфига с помощью опции `-c`или `--config`:

```
vendor/bin/config_builder -c path/to/config_builder.yaml path/to/config.php

```

Результат работы выдается в stdout. В том случае, если нужно все сохранить в файл, то можно воспользоваться перенаправлением вывода:

```
vendor/bin/config_builder path/to/config.example.php > path/to/config.php

```

3. Имена шаблонов
-----------------

[](#3-имена-шаблонов)

Каждый шаблон обычно ограничен какими-либо рамками в начале и конце. Например: `{{db.host}}`. В текущем примере имя шаблона - это `db.host`

В именах мы можем использовать вложенность, если нам нужно получить значение из массива. Уровни разделяем с помощью точки (`.`). Есть возможность использовать и цифровые индексы.

4. Обработчики шаблонов
-----------------------

[](#4-обработчики-шаблонов)

Каждый обработчик шаблона должен реализовывать интерфейс `iamsalnikov\ConfigBuilder\Interfaces\PlaceholderProcessor`.

На текущий момент есть только один обработчик шаблонов - `iamsalnikov\ConfigBuilder\PlaceholderProcessors\BasicProcessor`. Его конструктор принимает два аргумента: левая граница плейсхоледра и правая граница плейсхолдера.

5. Провайдеры значений
----------------------

[](#5-провайдеры-значений)

Каждый провайдер значений реализует интерфейс `iamsalnikov\ConfigBuilder\Interfaces\ValueProvider`.

На текущий момет есть три провайдера значений:

1. `iamsalnikov\ConfigBuilder\ValueProviders\Environment` - провайдер значений из переменных окружения.

Конструктор принимает один необязательный аргумент: префикс переменной окружения.

Имена шаблонов, которые используют вложенность (например, `db.host`) будут преобразованы в `DB_HOST`. Если же установлен префикс, например, `GG_`, то значение для шаблона будет искаться в переменной окружения `GG_DB_HOST`.

2. `iamsalnikov\ConfigBuilder\ValueProviders\Json` - провайдер значений из `json`-файла.

Конструктор принимает один обязательный аргумент: путь до файла со значениями. Если путь не абсолютный, то он будет вычисляться относительно папки, содержащей конфиг сборщика.

Для получения вложенных значений используем синтаксис из пункта 3 (`db.host`, `user.0.email`).

3. `iamsalnikov\ConfigBuilder\ValueProviders\Yaml` - аналогично провайдеру `Json`, только работает с `yaml`-файлами.

> Всегда есть возможность определить свой собственный провайдер данных и использовать его

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

6. Пример работы
----------------

[](#6-пример-работы)

Имеем файл конфига `/var/www/config_builder.yaml`:

```
placeholder_processors:
  Basic:
    class: iamsalnikov\ConfigBuilder\PlaceholderProcessors\BasicProcessor
    arguments:
      - "{{"
      - "}}"

value_providers:
  YamlProvider:
    class: iamsalnikov\ConfigBuilder\ValueProviders\Yaml
    arguments:
      - placeholders/data.yaml # файл будет найден в /var/www/placeholders/data.yaml

  Environment:
    class: iamsalnikov\ConfigBuilder\ValueProviders\Environment
    arguments:
      - PRF_
```

Данные из файла `/var/www/placeholders/data.yaml`:

```
db:
  host: localhost
  port: 3306
  dbName: hello
  user: user
  password: superpassword
```

Переменная окружения `PRF_DB_SECURITY_KEY="securnost"`

Контент файла с шаблонами (`config.php`):

```
