Недавно создавал тему с демонстрацией своей реализации функции для сохранение массивов в файлы 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'
)
;