alexandrebulete / ddd-apiplatform-bridge
API Platform bridge for DDD Foundation - Pure PHP, no framework dependency
Installs: 0
Dependents: 1
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/alexandrebulete/ddd-apiplatform-bridge
Requires
- php: ^8.2
- alexandrebulete/ddd-foundation: ^1.1
- api-platform/core: ^4.2
This package is auto-updated.
Last update: 2026-01-26 23:44:21 UTC
README
API Platform bridge for DDD Foundation. Provides State providers, processors, and pagination utilities.
Pure PHP - No framework dependency. Can be used with Symfony or Laravel (future).
Installation
composer require alexandrebulete/ddd-apiplatform-bridge
For Symfony integration, also install:
composer require alexandrebulete/ddd-apiplatform-bundle
Structure
src/
└── State/
└── Paginator.php
Usage
Paginator
A generic paginator implementing API Platform's PaginatorInterface:
use AlexandreBulete\DddApiPlatformBridge\State\Paginator; use AlexandreBulete\DddFoundation\Application\Query\QueryBusInterface; class GetPostsProvider implements ProviderInterface { public function __construct( private QueryBusInterface $queryBus, ) {} public function provide(Operation $operation, array $uriVariables = [], array $context = []): object|array|null { $repository = $this->queryBus->ask(new GetPostsQuery( page: $context['filters']['page'] ?? 1, itemsPerPage: $context['filters']['itemsPerPage'] ?? 30, )); $paginator = $repository->paginator(); if (null === $paginator) { return iterator_to_array($repository); } return new Paginator( items: $paginator, currentPage: $paginator->getCurrentPage(), itemsPerPage: $paginator->getItemsPerPage(), lastPage: $paginator->getLastPage(), totalItems: $paginator->getTotalItems(), ); } }
Usage with API Platform Resources
use ApiPlatform\Metadata\ApiResource; use ApiPlatform\Metadata\GetCollection; #[ApiResource( operations: [ new GetCollection( provider: GetPostsProvider::class, ), ], )] class PostResource { public function __construct( public string $id, public string $title, public string $content, ) {} }