 |
|

02.06.2022, 17:38
|
|
Постоянный
Регистрация: 01.03.2016
Сообщений: 828
С нами:
5368054
Репутация:
448
|
|
Всем привет!
Недавно создавал тему с демонстрацией своей реализации функции для сохранение массивов в файлы 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: PhpConfig
Ссылка на Packagist: PhpConfig
|
|
|

02.06.2022, 18:09
|
|
Флудер
Регистрация: 20.01.2015
Сообщений: 7,201
С нами:
5952720
Репутация:
6527
|
|
Правилом хорошего того является реализация интерфейса ArrayAccess
|
|
|

02.06.2022, 18:16
|
|
Постоянный
Регистрация: 01.03.2016
Сообщений: 828
С нами:
5368054
Репутация:
448
|
|
Сообщение от kick
Правилом хорошего того является реализация интерфейса ArrayAccess
Почитал, спасибо. Думаю действительно стоит внести корректировки.
|
|
|

02.06.2022, 18:31
|
|
Познавший АНТИЧАТ
Регистрация: 07.05.2015
Сообщений: 1,791
С нами:
5799746
Репутация:
1388
|
|
Обнови композер файл. Тебе нужно установить минимальную версию пхп. У тебя от 8 как я понял.
Возможно пропустил: что будет, если файла нет, но запросить конфиг? Или файл битьій? Или в нем не пхп код?
Я бьі посоветовал еще ставить права на файльі, и папки.
[OFF]
Имхо:
Для себя, на какого-то лютова кастома можно, каждьій начина.щий пхп разраб делает свою цмс)
А так, все так же тянется куча проблем из-за хранения конфигов в файлах.
Не уверен что при наличии приличного количества конфигов, будет вьігоднее по перфомансу чем с базьі с сериалайзом.
[/OFF]
|
|
|

02.06.2022, 18:47
|
|
Постоянный
Регистрация: 01.03.2016
Сообщений: 828
С нами:
5368054
Репутация:
448
|
|
Сообщение от Desquire
Обнови композер файл. Тебе нужно установить минимальную версию пхп. У тебя от 8 как я понял.
Возможно пропустил: что будет, если файла нет, но запросить конфиг? Или файл битьій? Или в нем не пхп код?
Я бьі посоветовал еще ставить права на файльі, и папки.
[OFF]
Имхо:
Для себя, на какого-то лютова кастома можно, каждьій начина.щий пхп разраб делает свою цмс)
А так, все так же тянется куча проблем из-за хранения конфигов в файлах.
Не уверен что при наличии приличного количества конфигов, будет вьігоднее по перфомансу чем с базьі с сериалайзом.
[/OFF]
1) Eсли файла нет, просто не будет найден загруженный файл и вернется значение по умолчанию.
2) Если файл битый или содержимое не PHP не предусмотрел, внесу правки на этот счет, Exception какой нить брошу.
3) Про права не совсем понял. Типа настройки, можно ли сохранять/изменять конфиги определенного провайдера? Можно сделать, идея хорошая, если хочется просто читать и исключить любого рода изменения.
PS: Вы правы по поводу целесообразности использования данного подхода. Делал изначально для себя. Можно использовать при написании инсталятора сайта, когда нужно сохранить/сгенерировать некоторое количество не изменяемых конфигов. Конечно это можно сделать гораздо проще и на заморачиваться над написанием либы. Забыл написать что можно добавить свой файл на лету и сохранить его).
PHP:
Код:
$config
-
>
set
(
'custom'
,
[
'key'
=
'value'
]
)
;
$config
-
>
save
(
'custom'
)
;
// Будет создан файл custom.cfg.php
// Чтение новго конфига
$config
-
>
get
(
'custom.key'
)
;
// value
|
|
|

02.06.2022, 18:55
|
|
Познавший АНТИЧАТ
Регистрация: 07.05.2015
Сообщений: 1,791
С нами:
5799746
Репутация:
1388
|
|
Сообщение от Mex-Vision
3) Про права не совсем понял. Типа настройки, можно ли сохранять/изменять конфиги определенного провайдера? Можно сделать, идея хорошая, если хочется просто читать и исключить любого рода изменени
Права на папку и файл)
Там 775,777) Во многих системах проверяется права на файл)
Хотя тут наверно єто будет черезчур)
Тьі не ответил на обновление композера- сделай, а то не красиво)
|
|
|

02.06.2022, 19:10
|
|
Постоянный
Регистрация: 01.03.2016
Сообщений: 828
С нами:
5368054
Репутация:
448
|
|
Сообщение от Desquire
Права на папку и файл)
Там 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"
}
}
Это имелось ввиду?
|
|
|

02.06.2022, 20:53
|
|
Познавший АНТИЧАТ
Регистрация: 13.07.2016
Сообщений: 1,418
С нами:
5175542
Репутация:
548
|
|
для чего это дело нужно? я тут недавно сел пых изучать просто, знаний ноль, хочется смотреть на примеры простого кода, а тут сложно как то и не понятно куда это может пригодиться))
|
|
|

02.06.2022, 21:29
|
|
Постоянный
Регистрация: 01.03.2016
Сообщений: 828
С нами:
5368054
Репутация:
448
|
|
Сообщение от root@localhost:~#
для чего это дело нужно? я тут недавно сел пых изучать просто, знаний ноль, хочется смотреть на примеры простого кода, а тут сложно как то и не понятно куда это может пригодиться))
Предположим вы написали сайт и хотите сделать инсталятор, допустим как у StressWeb, вам необходимо получить от пользователя доступы к базе данных и сохранить их в массив, к которому потом будете обращаться. Ну и т.п. Хоть данные кешируйте в php файлы.
|
|
|

03.06.2022, 11:10
|
|
Познавший АНТИЧАТ
Регистрация: 07.05.2015
Сообщений: 1,791
С нами:
5799746
Репутация:
1388
|
|
Сообщение от Mex-Vision
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)
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|