[PHP] PhpConfig - библиотека для работы с конфигами!

Mex-Vision

Бессмертный
Iron Lord
Победитель в номинации 2022
Победитель в номинации 2021
Победитель в номинации 2020
Победитель в номинации 2019
Победитель в номинации 2017
Сообщения
829
Розыгрыши
0
Репутация
448
Реакции
539
Баллы
1 613
Всем привет!

Недавно создавал тему с демонстрацией своей реализации функции для сохранение массивов в файлы php.
Решил пойти немножко дальше, и написать небольшую библиотеку/пакет для работы с конфигами.

Установка:
С помощью composer: composer require mex-vision/phpconfig

Инициализация:

PHP:
use PhpConfig\Config;
use PhpConfig\ConfigProvider;

// Инициализация провайдера.
$provider = new ConfigProvider('path/to/config', '.cfg');

// Инициализация конфигурации.
$config = new Config($provider);

Возможности:
1.
Автозагрузка конфигов с папки, возможность указать суффикс файлов для фильтрации, например .cfg (site.cfg.php).
2. Удобное чтение конфигов, перемещение по ключам массива через точку и возможность указать параметр по умолчанию, который будет возвращен в случае отсутствия требуемого ключа в массиве. Первым ключом является название файла, без учета суффикса и формата (site.cfg.php). Например:
PHP:
$config->get('site.template', 'default');

// В качестве параметра по умолчанию может использовать callback функция
$result = $config->get('site.template', function(){
    return 'default';
});

3. Добавление/изменение конфигов, например:
PHP:
// Запись в контейнер с конфигами.
$config->set('site.template', 'new_template');

// Есть возможность добавить сразу массив данных.
$config->set('site.template', [
    'site_template' => 'new_site_template'
]);

4. Сохранение конфигов обратно в файлы:
PHP:
// Сохраняет конфиги обратно в 'path/to/config/site.cfg.php'.
$config->save('site');

// Сохраняет все конфиги.
$config->save();

5. Неограниченное кол-во источников шаблонов для работы с разными директориями вашего проекта и обращение к ним через указанный неймспейсинг:
PHP:
// Инициализируем новый провайдер:
$newProvider = new ConfigProvider('another/path/to/config', '.cfg');

// Добавляем его в наш объект и устанавливаем namespace для работы с ним:
$cfg->addProvider('another', $newProvider);

// Чтение:
$result = $config->get('@another.site.template');

// Редактирование:
$config->set('@another.site.template', 'new_template');

// Сохранение:
$config->save('@another.site');

// Сохранение всех конфигов с провайдера:
$config->save('@another');

Сcылка на GitHub:
Ссылка на Packagist:
 
Последнее редактирование:

Правилом хорошего того является реализация интерфейса ArrayAccess
 
Обнови композер файл. Тебе нужно установить минимальную версию пхп. У тебя от 8 как я понял.
Возможно пропустил: что будет, если файла нет, но запросить конфиг? Или файл битьій? Или в нем не пхп код?
Я бьі посоветовал еще ставить права на файльі, и папки.

Оффтоп:

Имхо:
Для себя, на какого-то лютова кастома можно, каждьій начина.щий пхп разраб делает свою цмс)
А так, все так же тянется куча проблем из-за хранения конфигов в файлах.
Не уверен что при наличии приличного количества конфигов, будет вьігоднее по перфомансу чем с базьі с сериалайзом.
 
  • Мне нравится
Реакции: kick
Обнови композер файл. Тебе нужно установить минимальную версию пхп. У тебя от 8 как я понял.
Возможно пропустил: что будет, если файла нет, но запросить конфиг? Или файл битьій? Или в нем не пхп код?
Я бьі посоветовал еще ставить права на файльі, и папки.

Оффтоп:

Имхо:
Для себя, на какого-то лютова кастома можно, каждьій начина.щий пхп разраб делает свою цмс)
А так, все так же тянется куча проблем из-за хранения конфигов в файлах.
Не уверен что при наличии приличного количества конфигов, будет вьігоднее по перфомансу чем с базьі с сериалайзом.
1) Eсли файла нет, просто не будет найден загруженный файл и вернется значение по умолчанию.
2) Если файл битый или содержимое не PHP не предусмотрел, внесу правки на этот счет, Exception какой нить брошу.
3) Про права не совсем понял. Типа настройки, можно ли сохранять/изменять конфиги определенного провайдера? Можно сделать, идея хорошая, если хочется просто читать и исключить любого рода изменения.

PS: Вы правы по поводу целесообразности использования данного подхода. Делал изначально для себя. Можно использовать при написании инсталятора сайта, когда нужно сохранить/сгенерировать некоторое количество не изменяемых конфигов. Конечно это можно сделать гораздо проще и на заморачиваться над написанием либы. Забыл написать что можно добавить свой файл на лету и сохранить его).
PHP:
$config->set('custom', [
    'key' = 'value'
]);
$config->save('custom'); // Будет создан файл custom.cfg.php

// Чтение новго конфига
 $config->get('custom.key'); // value
 
3) Про права не совсем понял. Типа настройки, можно ли сохранять/изменять конфиги определенного провайдера? Можно сделать, идея хорошая, если хочется просто читать и исключить любого рода изменени
Права на папку и файл)
Там 775,777) Во многих системах проверяется права на файл)
Хотя тут наверно єто будет черезчур)

Тьі не ответил на обновление композера- сделай, а то не красиво)
 
Права на папку и файл)
Там 775,777) Во многих системах проверяется права на файл)
Хотя тут наверно єто будет черезчур)

Тьі не ответил на обновление композера- сделай, а то не красиво)
JSON:
{
    "name": "mex-vision/phpconfig",
    "type": "library",
    "autoload": {
        "psr-4": {
            "PhpConfig\\": "src/"
        }
    },
    "authors": [
        {
            "name": "mex-vision",
            "email": "mex.vision.dev@gmail.com"
        }
    ],
    "minimum-stability": "dev",
    "require": {
        "php": ">=7.4"
    }
}
Это имелось ввиду?
 
для чего это дело нужно? я тут недавно сел пых изучать просто, знаний ноль, хочется смотреть на примеры простого кода, а тут сложно как то и не понятно куда это может пригодиться))
 
Последнее редактирование:
для чего это дело нужно? я тут недавно сел пых изучать просто, знаний ноль, хочется смотреть на примеры простого кода, а тут сложно как то и не понятно куда это может пригодиться))
Предположим вы написали сайт и хотите сделать инсталятор, допустим как у StressWeb, вам необходимо получить от пользователя доступы к базе данных и сохранить их в массив, к которому потом будете обращаться. Ну и т.п. Хоть данные кешируйте в php файлы.
 
JSON:
{
    "name": "mex-vision/phpconfig",
    "type": "library",
    "autoload": {
        "psr-4": {
            "PhpConfig\\": "src/"
        }
    },
    "authors": [
        {
            "name": "mex-vision",
            "email": "mex.vision.dev@gmail.com"
        }
    ],
    "minimum-stability": "dev",
    "require": {
        "php": ">=7.4"
    }
}
Это имелось ввиду?
Да)
Но и комиитьі желательно делать, с описанием( а не просто Add)
 
Назад
Сверху Снизу