centras / php-common
Common package for microservices
Requires
- guzzlehttp/guzzle: ^7.3
- phpunit/phpunit: ^9.5
This package is auto-updated.
Last update: 2024-04-30 00:57:00 UTC
README
PHP-Common - пакет, который вмещает в себя общие функции всех микросервисов.
Функционал
- Утилиты
- Проверка и обработка исключений
- Сообщения исключений
- Оболочка над Guzzle
- Организация query-запросов QueryBuilder
Содержание
Установка
- Создайте
auth.json
файл в корневой паке вашего проекта. Добавьтеaccess-token
. Подробнее узнать здесь. Не забудьте добавить файлauth.json
вgitignore
.
{ "gitlab-token": { "git.cic.kz": "your_token" } }
- Выполните команды:
composer config gitlab-domains git.cic.kz
composer config repositories.git.cic.kz/86 '{"type": "composer", "url": "https://git.cic.kz/api/v4/group/86/-/packages/composer/packages.json"}'
После выполнения команд в файле composer.json
должны появится записи:
"config": { ... "gitlab-domains": ["git.cic.kz"] }
"repositories": [{ "type" : "composer", "url" : "https://git.cic.kz/api/v4/group/86/-/packages/composer/packages.json" }],
- Установите пакет через composer:
$ composer req centras/php-common:1.0.1
- Перейдите в
bootstrap/app.php
и замените стандартныйHandler
наphpcommon/Handler/Handler::class
:
$app->singleton( Illuminate\Contracts\Debug\ExceptionHandler::class, phpcommon\Handler\Handler::class );
- Зарегистрируйте глобальные Middleware в
bootstrap/app.php
(при необходимости)
$app->middleware([ phpcommon\Middleware\AccessLevelMiddleware::class, phpcommon\Middleware\UserMiddleware::class ]);
- Зарегистрируйте Schedule для Heartbeat в app/Console/Kernel.php:
$schedule->call(function () { Scheduler::heartbeat(); })->everyMinute();
Не забудьте импортировать Scheduler (use phpcommon\Utils\Scheduler)
Query Builder
Конструктор запросов - утилита, предназначенная для фильтрации, пагинации, сортировки возвращаемых запросом данных. Конструктор принимает несколько статичных параметров.
Колонки
Позволяют отбирать определенные колонки модели. В случае указания некорректной колонки, будет выведена соответствующее исключение.
Параметр: columns
- /users?columns=email,uuid,first_name
"data": { "email": "Emanuel.Schowalter@hotmail.com", "uuid": "113eb3b3-2554-464d-9224-62e61c930f1a" "first_name": "Emanuel" }
Колонки
Позволяют отбирать определенные колонки модели. В случае указания некорректной колонки, будет выведено соответствующее исключение.
Параметр: columns
- /users?columns=email,uuid,first_name
{ "email": "Emanuel.Schowalter@hotmail.com", "uuid": "113eb3b3-2554-464d-9224-62e61c930f1a" "first_name": "Emanuel" }
Подобный функционал также осуществим и со связями-зависимостями.
- /users?columns=email,social_networks.name,social_networks.url
{ "email": "Emanuel.Schowalter@hotmail.com", "social_networks": [ { "name": "Telegram", "url": "https://telegram.org" } ] }
Включения
Позволяют отбирать определенные зависимости модели. В случае указания некорректной связи, будет выведено соответствующее исключение.
Параметр: includes
- /users?includes=social_networks
{ "email": "Emanuel.Schowalter@hotmail.com", "uuid": "113eb3b3-2554-464d-9224-62e61c930f1a" "first_name": "Emanuel", "social_networks": [ { "id": 1, "name": "Twitter", "url": "https://twitter.com/" } ] }
Лимиты
Лимиты позволяют определять количество записей на странице. Значение по умолчанию: 15 записей.
Параметр: limit
- /users?limit=5
Страницы
Применяется с лимитами, определяет номер страницы. Позволяет разделять большой объем данных на страницы с фиксированным количеством записей на каждой. Значение по умолчанию: 15 записей.
Параметр: page
- /users?page=1
Сортировка
Позволяет определять порядок записей.
Параметр: order_by
- /users?order_by=id:asc,uuid:desc
Фильтрация
Позволяет фильтровать входные данные.
Параметр: динамический Ключом параметра является название колонки.
Примеры запросов фильтрации:
- /users?first_name=Emanuel
- /users?first_name!=Emanuel
- /users?first_name=*uel
- /users?first_name=Em*
- /users?first_name=*an*
- /users?balance=1.546
- /users?balance=<2.55
- /users?balance=>1.699
- /users?balance<2.45
- /users?balance>1.324
- /users?first_name=[null]
- /users?first_name!=[null]