Configuration is simple

228
.
reaper
Ну наверное. Гг. Короче запилил еще одну либу, которая позволяет удобно работать с конфигами.
https://github.com/Kilte/configuration

Container

Класс Kilte\Configuration\Container -- главная часть либы.

Он предоставляет метод load(), который принимает имя файла для загрузки (без расширения) и возвращает объект класса Kilte\Configuration\Resource.

Resource

Класс Kilte\Configuration\Resource выполняет роль обертки над загруженным конфигом.

Он реализует интерфейс \ArrayAccess, что позволяет обращаться к объектам как к массивам и также предоставляет два дополнительных метода:

mixed get(string $key[, mixed $default = null])
Возвращает значение по ключу. Если ключа нет, то вернет то, что лежит в $default.
array all()
Возвращает все значения.

Loader

Kilte\Configuration\FileLoader отвечает за загрузку файлов.
Конструктор класса принимает два экземпляра классов, которые реализуют следующие интерфейсы:

Kilte\Configuration\Locator\FileLocatorInterface
Kilte\Configuration\Parser\ParserInterface

Locator

Kilte\Configuration\Locator\FileLocator отвечает за поиск файла.

Конструктор принимает следующие аргументы:

Массив директорий, где следует искать.
Массив поддерживаемых расширений.

Можно создать свой локатор, который реализует Kilte\Configuration\Locator\FileLocatorInterface

Parser

Отвечает за конвертацию содержимого конфига в массив.
По умолчанию доступны следующие парсеры:

JsonParser
IniParser
YamlParser (нужен Symfony/Yaml компонент)

Можно создать свой парсер, реализовав Kilte\Configuration\Parser\ParserInterface

Пример

require __DIR__ . '/vendor/autoload.php';

use Kilte\Configuration\Container;
use Kilte\Configuration\FileLoader;
use Kilte\Configuration\Locator\FileLocator;
use Kilte\Configuration\Parser\JsonParser;

$locator = new FileLocator([__DIR__], ['json']);
$parser = new JsonParser();
$loader = new FileLoader($locator, $parser);
$container = new Container($loader);

var_dump($container->load('composer')->get('name'));
// string(19) "kilte/configuration"
Всего: 1