{"id":22178020,"url":"https://github.com/fi1a/config","last_synced_at":"2026-05-06T07:37:28.397Z","repository":{"id":63985440,"uuid":"571361798","full_name":"fi1a/config","owner":"fi1a","description":"PHP работа с файлами конфигураций. Поддерживает файлы в PHP и JSON форматах.","archived":false,"fork":false,"pushed_at":"2023-02-20T00:43:33.000Z","size":78,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-05T01:45:38.631Z","etag":null,"topics":["config","json","parser","php"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fi1a.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-11-28T00:19:31.000Z","updated_at":"2022-12-02T04:08:56.000Z","dependencies_parsed_at":"2024-12-02T08:44:58.567Z","dependency_job_id":null,"html_url":"https://github.com/fi1a/config","commit_stats":{"total_commits":29,"total_committers":1,"mean_commits":29.0,"dds":0.0,"last_synced_commit":"7dc98e055ec468b7362bb7598f4759ce832728f1"},"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fi1a%2Fconfig","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fi1a%2Fconfig/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fi1a%2Fconfig/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fi1a%2Fconfig/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fi1a","download_url":"https://codeload.github.com/fi1a/config/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245326949,"owners_count":20597121,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["config","json","parser","php"],"created_at":"2024-12-02T08:34:18.281Z","updated_at":"2026-05-06T07:37:28.367Z","avatar_url":"https://github.com/fi1a.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PHP работа с файлами конфигураций. Поддерживает файлы в PHP и JSON форматах.\n\n[![Latest Version][badge-release]][packagist]\n[![Software License][badge-license]][license]\n[![PHP Version][badge-php]][php]\n![Coverage Status][badge-coverage]\n[![Total Downloads][badge-downloads]][downloads]\n[![Support mail][badge-mail]][mail]\n\nПакет представляет собой загрузчик конфигурационных файлов, который поддерживает PHP и JSON форматы.\n\n## Установка\n\nУстановить этот пакет можно как зависимость, используя Composer.\n\n``` bash\ncomposer require fi1a/config\n```\n\n## Пример загрузки и сохранения конфигурационного файла\n\nОбъект со значениями конфигурационного файла ```Fi1a\\Config\\ConfigValuesInterface``` можно создать с помощью фабричного метода load(),\nв который необходимо передать объект ```Fi1a\\Config\\Readers\\ReaderInterface``` для чтения из файла и\n```Fi1a\\Config\\Parsers\\ParserInterface``` для парсинга:\n\n```php\nuse Fi1a\\Config\\Config;\nuse Fi1a\\Config\\Parsers\\PHPParser;\nuse Fi1a\\Config\\Readers\\FileReader;\nuse Fi1a\\Config\\Writers\\FileWriter;\nuse Fi1a\\Filesystem\\Adapters\\LocalAdapter;\nuse Fi1a\\Filesystem\\Filesystem;\n\n$filesystem = new Filesystem(new LocalAdapter(__DIR__));\n$file = $filesystem-\u003efactoryFile('./config.php');\n\n$reader = new FileReader($file);\n$writer = new FileWriter($file);\n\n$parser = new PHPParser();\n\n$config = Config::load($reader, $parser); // Fi1a\\Config\\ConfigValuesInterface\n\n$config-\u003eget('path:to:value', true);\n$config-\u003eset('path:to:value', 'value');\n\nConfig::write($config, $writer, $parser); // true\n```\n\n## Пример загрузки конфигурационных файлов\n\nЗначения можно получить из нескольких файлов, используя метод ```Fi1a\\Config\\Config::batchLoad```\nи передав массив с объектами ```Fi1a\\Config\\Readers\\ReaderInterface``` для чтения из файла и\n```Fi1a\\Config\\Parsers\\ParserInterface``` для парсинга:\n\n```php\nuse Fi1a\\Config\\Config;\nuse Fi1a\\Config\\Parsers\\PHPParser;\nuse Fi1a\\Config\\Readers\\FileReader;\nuse Fi1a\\Filesystem\\Adapters\\LocalAdapter;\nuse Fi1a\\Filesystem\\Filesystem;\n\n$parser = new PHPParser();\n\n$filesystem = new Filesystem(new LocalAdapter(__DIR__));\n\n$config = Config::batchLoad([\n    [\n        new FileReader($filesystem-\u003efactoryFile('./config1.php')),\n        $parser,\n    ],\n    [\n        new FileReader($filesystem-\u003efactoryFile('./config2.php')),\n        $parser,\n    ],\n    [\n        new FileReader($filesystem-\u003efactoryFile('./config3.php')),\n        $parser,\n    ],\n]); // Fi1a\\Config\\ConfigValuesInterface\n\n$config-\u003eget('path:to:value', true);\n```\n\n## Класс со значениями\n\nМетоды   ```Fi1a\\Config\\Config::load``` и ```Fi1a\\Config\\Config::batchLoad``` возвращают\nобъект ```Fi1a\\Config\\ConfigValues```, реализующий интерфейс ```Fi1a\\Collection\\DataType\\PathAccessInterface```\nиз пакета [fi1a/collection](https://github.com/fi1a/collection).\n\nДанный класс позволяет получать доступ к ключам массива по пути (foo:bar:baz).\n\nДля создания нового объекта со значениями можно использовать метод `Fi1a\\Config\\Config::create`:\n\n```php\nuse Fi1a\\Config\\Config;\n\n$register = Config::create(['foo' =\u003e ['bar' =\u003e ['baz' =\u003e 1], 'qux' =\u003e 2,],]);\n\n$register-\u003eget('foo:bar:baz'); // 1\n$register-\u003eget('foo:qux'); // 2\n$register-\u003eget('foo:bar:baz:bat'); // null\n$register-\u003eget('foo:bar:baz:bat', false); // false\n\n$register-\u003ehas('foo:bar'); // true\n$register-\u003ehas('foo:bar:baz'); // true\n$register-\u003ehas('foo:bar:baz:bat'); // false\n```\n\n## Чтение\n\nЗа чтение конфигураций отвечают классы, реализующие интерфейс ```Fi1a\\Config\\Readers\\ReaderInterface```.\n\n## Чтение конфигурационного файла\n\nКласс ```Fi1a\\Config\\Readers\\FileReader``` осуществляет чтение кодированной строки из файла.\n\n| Аргумент         | Описание     |\n|------------------|--------------|\n| string $filePath | Путь к файлу |\n\n```php\nuse Fi1a\\Config\\Config;\nuse Fi1a\\Config\\Parsers\\PHPParser;\nuse Fi1a\\Config\\Readers\\FileReader;\nuse Fi1a\\Filesystem\\Adapters\\LocalAdapter;\nuse Fi1a\\Filesystem\\Filesystem;\n\n$filesystem = new Filesystem(new LocalAdapter(__DIR__));\n\n$reader = new FileReader($filesystem-\u003efactoryFile('./config.php'));\n$parser = new PHPParser();\n\n$config = Config::load($reader, $parser); // Fi1a\\Config\\ConfigValuesInterface\n\n$config-\u003eget('path:to:value', true);\n$config-\u003eset('path:to:value', 'value');\n```\n\n## Чтение конфигурационных файлов из директории\n\nКласс ```Fi1a\\Config\\Readers\\DirectoryReader``` осуществляет чтение файлов конфигураций из переданной директории по маске.\nАргументы конструктора:\n\n| Аргумент              | Описание                                    |\n|-----------------------|---------------------------------------------|\n| string $directoryPath | Путь до директории                          |\n| string $regex         | Регулярное выражение. Маска для имен файлов |\n\n```php\nuse Fi1a\\Config\\Config;\nuse Fi1a\\Config\\Parsers\\PHPParser;\nuse Fi1a\\Config\\Readers\\DirectoryReader;\nuse Fi1a\\Filesystem\\Adapters\\LocalAdapter;\nuse Fi1a\\Filesystem\\Filesystem;\n\n$filesystem = new Filesystem(new LocalAdapter(__DIR__));\n\n$reader = new DirectoryReader($filesystem-\u003efactoryFolder('.'), '/^(.+)\\.config\\.php$/');\n$parser = new PHPParser();\n\n$config = Config::load($reader, $parser); // Fi1a\\Config\\ConfigValuesInterface\n\n$config-\u003eget('path:to:value', true);\n$config-\u003eset('path:to:value', 'value');\n```\n\n## Запись\n\nЗа запись конфигураций отвечают классы реализующие интерфейс ```Fi1a\\Config\\Writers\\WriterInterface```.\n\n## Запись конфигурационного файла\n\nКласс ```Fi1a\\Config\\Writers\\FileWriter``` осуществляет запись кодированной строки в файл.\n\n| Аргумент         | Описание               |\n|------------------|------------------------|\n| string $filePath | Путь для записи в файл |\n\n```php\nuse Fi1a\\Config\\Config;\nuse Fi1a\\Config\\Parsers\\PHPParser;\nuse Fi1a\\Config\\Writers\\FileWriter;\nuse Fi1a\\Filesystem\\Adapters\\LocalAdapter;\nuse Fi1a\\Filesystem\\Filesystem;\n\n$filesystem = new Filesystem(new LocalAdapter(__DIR__));\n\n$writer = new FileWriter($filesystem-\u003efactoryFile('./config.php'));\n\n$parser = new PHPParser();\n\n$config = Config::create(['foo' =\u003e 'bar', 'baz' =\u003e [1, 2, 3]]);\n\nConfig::write($config, $writer, $parser); // true\n```\n\n## Кодирование\n\nЗа кодирование конфигураций отвечают классы, реализующие интерфейс ```Fi1a\\Config\\Parsers\\ParserInterface```.\n\n## Создание объекта парсера на основе типа файла\n\nИспользуя фабричный метод ```Fi1a\\Config\\Parsers\\Factory::byFileType``` можно получить объект парсера на основе расширения файла: \n\n```php\nuse Fi1a\\Config\\Config;\nuse Fi1a\\Config\\Parsers\\Factory;\nuse Fi1a\\Config\\Readers\\FileReader;\nuse Fi1a\\Filesystem\\Adapters\\LocalAdapter;\nuse Fi1a\\Filesystem\\Filesystem;\n\n$filesystem = new Filesystem(new LocalAdapter(__DIR__));\n\n$file = $filesystem-\u003efactoryFile('./config.json');\n$reader = new FileReader($file);\n$parser = Factory::byFileType($file-\u003egetPath()); // Fi1a\\Config\\Parsers\\JSONParser\n\n$config = Config::load($reader, $parser); // Fi1a\\Config\\ConfigValuesInterface\n\n$config-\u003eget('path:to:value', true);\n```\n\n## Кодирование в PHP формат\n\nДля кодирование в PHP формат следует использовать класс ```Fi1a\\Config\\Parsers\\PHPParser```.\nВ конструктор  можно передать в качестве аргументов следующие значения:\n\n| Аргумент                         | Описание                                                           |\n|----------------------------------|--------------------------------------------------------------------|\n| string $encoding = 'UTF-8'       | Кодировка                                                          |\n| bool $useShortArraySyntax = true | Использовать короткую нотацию массивов или нет                     |\n| string $indent = '4spaces'       | Определяет значение отступов ('4spaces', '1tab' или ваше значение) |\n\nПример:\n\n```php\nuse Fi1a\\Config\\Config;\nuse Fi1a\\Config\\Parsers\\PHPParser;\nuse Fi1a\\Config\\Readers\\FileReader;\nuse Fi1a\\Config\\Writers\\FileWriter;\nuse Fi1a\\Filesystem\\Adapters\\LocalAdapter;\nuse Fi1a\\Filesystem\\Filesystem;\n\n$filesystem = new Filesystem(new LocalAdapter(__DIR__));\n\n$file = $filesystem-\u003efactoryFile('./config.php');\n$reader = new FileReader($file);\n$writer = new FileWriter($file);\n$parser = new PHPParser('UTF-8', false, '1tab');\n\n$config = Config::load($reader, $parser); // Fi1a\\Config\\ConfigValuesInterface\n\n$config-\u003eget('path:to:value', true);\n$config-\u003eset('path:to:value', 'value');\n\nConfig::write($config, $writer, $parser); // true\n```\n\n## Кодирование в JSON формат\n\nДля кодирование в JSON формат следует использовать класс ```Fi1a\\Config\\Parsers\\JSONParser```.\nВ конструктор можно передать в качестве аргументов следующие значения:\n\n| Аргумент           | Описание                                                                                                     |\n|--------------------|--------------------------------------------------------------------------------------------------------------|\n| ?int $depth = null | Максимальная глубина вложенности структуры, для которой будет производиться декодирование. По умолчанию: 512 |\n| ?int $flags = null | Битовая маска из [констант](https://www.php.net/manual/ru/json.constants.php).                               |\n\nПример:\n\n```php\nuse Fi1a\\Config\\Config;\nuse Fi1a\\Config\\Parsers\\JSONParser;\nuse Fi1a\\Config\\Readers\\FileReader;\nuse Fi1a\\Filesystem\\Adapters\\LocalAdapter;\nuse Fi1a\\Filesystem\\Filesystem;\n\n$filesystem = new Filesystem(new LocalAdapter(__DIR__));\n\n$reader = new FileReader($filesystem-\u003efactoryFile('./config.json'));\n$parser = new JSONParser(64, JSON_UNESCAPED_UNICODE | JSON_THROW_ON_ERROR);\n\n$config = Config::load($reader, $parser); // Fi1a\\Config\\ConfigValuesInterface\n\n$config-\u003eget('path:to:value', true);\n$config-\u003eset('path:to:value', 'value');\n```\n\n[badge-release]: https://img.shields.io/packagist/v/fi1a/config?label=release\n[badge-license]: https://img.shields.io/github/license/fi1a/config?style=flat-square\n[badge-php]: https://img.shields.io/packagist/php-v/fi1a/config?style=flat-square\n[badge-coverage]: https://img.shields.io/badge/coverage-100%25-green\n[badge-downloads]: https://img.shields.io/packagist/dt/fi1a/config.svg?style=flat-square\u0026colorB=mediumvioletred\n[badge-mail]: https://img.shields.io/badge/mail-support%40fi1a.ru-brightgreen\n\n[packagist]: https://packagist.org/packages/fi1a/config\n[license]: https://github.com/fi1a/config/blob/master/LICENSE\n[php]: https://php.net\n[downloads]: https://packagist.org/packages/fi1a/config\n[mail]: mailto:support@fi1a.ru","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffi1a%2Fconfig","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffi1a%2Fconfig","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffi1a%2Fconfig/lists"}