ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   Общие вопросы программирования (https://forum.antichat.xyz/forumdisplay.php?f=206)
-   -   [PHP] PhpConfig - библиотека для работы с конфигами! (https://forum.antichat.xyz/showthread.php?t=783652)

Mex-Vision 02.06.2022 17:38

Всем привет!

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

kick 02.06.2022 18:09

Правилом хорошего того является реализация интерфейса ArrayAccess

Mex-Vision 02.06.2022 18:16

Цитата:

Сообщение от kick

Правилом хорошего того является реализация интерфейса ArrayAccess

Почитал, спасибо. Думаю действительно стоит внести корректировки.

Desquire 02.06.2022 18:31

Обнови композер файл. Тебе нужно установить минимальную версию пхп. У тебя от 8 как я понял.

Возможно пропустил: что будет, если файла нет, но запросить конфиг? Или файл битьій? Или в нем не пхп код?

Я бьі посоветовал еще ставить права на файльі, и папки.

[OFF]

Имхо:

Для себя, на какого-то лютова кастома можно, каждьій начина.щий пхп разраб делает свою цмс)

А так, все так же тянется куча проблем из-за хранения конфигов в файлах.

Не уверен что при наличии приличного количества конфигов, будет вьігоднее по перфомансу чем с базьі с сериалайзом.

[/OFF]

Mex-Vision 02.06.2022 18:47

Цитата:

Сообщение от 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


Desquire 02.06.2022 18:55

Цитата:

Сообщение от Mex-Vision

3) Про права не совсем понял. Типа настройки, можно ли сохранять/изменять конфиги определенного провайдера? Можно сделать, идея хорошая, если хочется просто читать и исключить любого рода изменени

Права на папку и файл)

Там 775,777) Во многих системах проверяется права на файл)

Хотя тут наверно єто будет черезчур)

Тьі не ответил на обновление композера- сделай, а то не красиво)

Mex-Vision 02.06.2022 19:10

Цитата:

Сообщение от 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"
}
}

Это имелось ввиду?

root@localhost:~# 02.06.2022 20:53

для чего это дело нужно? я тут недавно сел пых изучать просто, знаний ноль, хочется смотреть на примеры простого кода, а тут сложно как то и не понятно куда это может пригодиться))

Mex-Vision 02.06.2022 21:29

Цитата:

Сообщение от root@localhost:~#

для чего это дело нужно? я тут недавно сел пых изучать просто, знаний ноль, хочется смотреть на примеры простого кода, а тут сложно как то и не понятно куда это может пригодиться))

Предположим вы написали сайт и хотите сделать инсталятор, допустим как у StressWeb, вам необходимо получить от пользователя доступы к базе данных и сохранить их в массив, к которому потом будете обращаться. Ну и т.п. Хоть данные кешируйте в php файлы.

Desquire 03.06.2022 11:10

Цитата:

Сообщение от 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)


Время: 01:47