suddhah / userlist-handler
Laravel package for processing strings of various formats
v1.1.2
2024-10-01 03:44 UTC
Requires
- php: ^8.2
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.64
- orchestra/testbench: ^9.5
Suggests
- ext-json: *
- ext-libxml: *
- ext-simplexml: *
This package is auto-updated.
Last update: 2025-04-29 01:36:50 UTC
README
Пакет который обрабатывает строки различных форматов. Опционально поддерживает интеграцию с Laravel.
Минимальные требования
- PHP 8.2
- Laravel 11.0 и выше
Установка
composer require suddhah/userlist-handler
Использование
Доступны три реализации парсера:
Каждая из которых возвращает массив с обработанными данными, либо EmptyDataException / InvalidFormatException
JSON: Suddhah\UserListHandler\Parsers\JsonParser
CSV: Suddhah\UserListHandler\Parsers\CsvParser
XML: Suddhah\UserListHandler\Parsers\XmlParser
Пример использования:
// Данные для парсинга $data = '...'; // Создаем реестр с парсерами $parserRegistry = ParserFactory::createParserRegistry(); // Создаем экземпляр парсера, передаем ему экземпляр детектора для проверки формата строки $userListHandler = new UserListHandler($parserRegistry); // Запускаем парсер // 1. Если нужно явно указать тип строки, можно передать константу (TYPE_JSON, TYPE_CSV, TYPE_XML) $result = $userListHandler->run($data, UserListHandler::TYPE_CSV); // 2. Если имеется доступ к имени файла, можно воспользоваться хелпером detect_type_by_name() $result = $userListHandler->run($data, detect_type_by_name($filename));
Пример использования в контексте Laravel через фасад UserListFacade:
UserListFacade::run($data, UserlistHandler::TYPE_JSON);
Пример входящих данных
{ "users": [ { "id": 1, "name": "Иван Петров", "email": "ivan@example.com", "age": 30 }, ... ] }
id,name,email,age
1,Иван Петров,ivan@example.com,30
2,Мария Сидорова,maria@example.com,25
3,Алексей Иванов,alexey@example.com,35
<?xml version="1.0" encoding="UTF-8"?> <users> <user> <id>1</id> <name>Иван Петров</name> <email>ivan@example.com</email> <age>30</age> </user> ... </users>
Возвращаемые данные:
array:3 [ 0 => array:4 [ "id" => 1 "name" => "Иван Петров" "email" => "ivan@example.com" "age" => 30 ] 1 => array:4 [ "id" => 2 "name" => "Мария Сидорова" "email" => "maria@example.com" "age" => 25 ] 2 => array:4 [ "id" => 3 "name" => "Алексей Иванов" "email" => "alexey@example.com" "age" => 35 ] ]
Расширение своими реализациями:
- Создать свою реализацию интерфейса ParserInterface в директории Parsers.
class YamlParser implements ParserInterface { public function parse(string $data): array { // Логика для парсинга YAML } }
- Регистрация нового парсера.
ParserFactory::registerParser('yaml', new YamlParser());
- Вызов нового парсера.
// 1. Если нужно явно указать тип строки, передать установленное ранее значение для типа в ParserFactory::registerParser() $result = $userListHandler->run($data, 'yaml'); // 2. Если имеется доступ к имени файла, можно воспользоваться хелпером detect_type_by_name() $result = $userListHandler->run($data, detect_type_by_name($filename));
Тестирование
Выполнить команду composer install --dev
, а затем запустить одну из следующих команду из корня данного пакета:
composer test
PHP CS Fixer
Используется PHP CS Fixer для автоматического форматирования кода согласно стандартам PHP.
composer lint
Соблюдаемые принципы
S - Single Responsibility Principle: Каждый класс отвечает за свою единственную задачу — парсинг конкретного формата.
O - Open/Closed Principle: Новые парсеры могут быть добавлены без изменения существующих.
L - Liskov Substitution Principle: Все парсеры реализуют единый интерфейс и могут использоваться взаимозаменяемо.
I - Interface Segregation Principle: Интерфейс имеет всего один метод, что позволяет избежать ненужных зависимостей.
D - Dependency Inversion Principle: Класс UserListHandler зависит от абстракций (интерфейсов), а не от конкретных реализаций.