jeyroik / extas-expands
Extas expands package
Installs: 1 141
Dependents: 3
Suggesters: 0
Security: 0
Stars: 0
Watchers: 2
Forks: 0
Open Issues: 0
Requires
Requires (Dev)
README
Описание
Пакет позволяет создавать распаковывающиеся объекты, т.е. примерно такие:
GET /index
Accept: application/json
Response:
{ "app": { "name": "example app", "expand": ["app.version", "app.player"] } }
GET /index?expand=app.version,app.player
Accept: application/json
Response:
{ "app": { "name": "example app", "version": "1.0", "player": { "name": "root", "title": "...", "description": "...", "expand": ["player.aliases", "player.identities", "player.settings"] }, "expand": ["app.version", "app.player"] } }
GET /index?expand=app.version,app.player,player.aliases
Accept: application/json
Response:
{ "app": { "name": "example app", "version": "1.0", "player": { "name": "root", "title": "...", "description": "...", "aliases": ["root", "admin", "authorized"], "expand": ["player.aliases", "player.identities", "player.settings"] }, "expand": ["app.version", "app.player"] } }
Применение экспандов
use extas\components\Item; use extas\components\expands\Expand; /** * @var Psr\Http\Message\RequestInterface $request * @var Psr\Http\Message\ResponseInterface $response */ $app = new class([ 'name' => 'example app' ]) extends Item { protected function getSubjectForExtension() : string{ return 'app'; } }; $expand = new Expand([ Expand::FIELD__PSR_REQUEST => $request, Expand::FIELD__PSR_RESPONSE => $response, Expand::FIELD__ARGUMENTS => [ Expand::ARG__EXPAND => 'app.version' ] ]); $app = $expand->expand($app);
В момент вызова метода expand
произойдёт запуск двух стадий:
extas.expand.parse
: на этой стадии разбирается строкаexpand
из аргументов (Expand::FIELD__ARGUMENTS
).extas.expand.app.version
: на этой стадии происходит сама распаковка.
В extas-совместимой конфигурации:
{ "plugins": [ { "class": "\\PluginAppExpandVersion", "stage": "extas.expand.app.version" } ] }
Результат применения:
use extas\components\Item; use extas\components\expands\Expand; /** * @var Psr\Http\Message\RequestInterface $request * @var Psr\Http\Message\ResponseInterface $response */ $app = new class([ 'name' => 'example app' ]) extends Item { protected function getSubjectForExtension() : string{ return 'app'; } }; $expand = new Expand([ Expand::FIELD__PSR_REQUEST => $request, Expand::FIELD__PSR_RESPONSE => $response, Expand::FIELD__ARGUMENTS => [ Expand::ARG__EXPAND => 'app.version' ] ]); $app = $expand->expand($app); print_r($app->__toArray());
Результат примерно следующий:
Array ( "name" => "example app" "version" => "1.0" "expand" => ["app.version", "app.player"] )
Плагины из коробки
Пакет из коробки предоставляет два плагина для парсинга:
- Поддержка вайлдкарда: позволяет использовать экспанды вида
app.*
, которые распакуют всё, что есть для сущности. - Проверка на пустоту: удаляет пустые элементы экспанда
Чтобы подключить эти плагины, их необходимо импортировать:
extas.json
{ "import": { "from": { "extas/expands": { "plugins": "*" } }, "parameters": { "on_miss_package": { "name": "on_miss_package", "value": "continue" }, "on_miss_section": { "name": "on_miss_section", "value": "throw" } } } }