nubitio / api-platform
API Platform bridge for the Nubit admin stack: data-grid filter (sort/filter/searchValue), translated OpenAPI docs with x-crud hints for @nubitio/hydra, pagination headers, and entity traits.
v0.9.0
2026-06-12 11:15 UTC
Requires
- php: >=8.5
- api-platform/core: ^4.1
- doctrine/orm: ^3.0
- doctrine/persistence: ^4.0
- nubitio/platform: 0.*
- psr/log: ^3.0
- symfony/dependency-injection: ^7.4 || ^8.0
- symfony/event-dispatcher: ^7.4 || ^8.0
- symfony/framework-bundle: ^7.4 || ^8.0
- symfony/http-foundation: ^7.4 || ^8.0
- symfony/http-kernel: ^7.4 || ^8.0
- symfony/serializer: ^7.4 || ^8.0
- symfony/translation-contracts: ^3.0
Requires (Dev)
- phpunit/phpunit: ^12.0
- symfony/translation: ^7.4 || ^8.0
README
API Platform bridge for the Nubit admin stack: everything a Symfony backend needs so @nubitio/react-admin can auto-generate CRUD screens from your API docs.
composer require nubitio/api-platform
What's inside
DataGridFilter— implements the grid query contract (sort,filter,searchValue) that@nubitio/coreserializes. Add#[ApiFilter(DataGridFilter::class)]to a resource and the React datagrid's filtering/sorting/search work end to end.GridVirtualFieldInterface— extension point for computed/joined fields with no ORM mapping. Tag implementations withnubit.api_platform.grid_virtual_field;GridFilterHelperprovides the operator/parameter utilities.TranslatedDocumentationNormalizer— translatesApiPropertydescription i18n keys into the Hydra/OpenAPI docs and forwardsx-crudhints that@nubitio/hydraturns into field definitions.ApiResponseListener— addsX-Total-Count,X-Total-Pages,X-Current-Pageheaders to collection responses.ExceptionListener— mapsNubit\Platform\Exception\*to consistent JSON error responses (422 with violations forValidationException, etc.).BaseController— thinAbstractControllerwith theApiResponseenvelope helpers.- Entity traits —
TimestampableTrait,SoftDeletableTrait.
Service registration
Until the admin bundle ships, register the services in your config/services.yaml
(the listeners carry #[AsEventListener], they just need to exist as services):
services: # Gets the api_platform.filter tag via autoconfiguration; required for # resources declaring filters: [DataGridFilter::class] Nubit\ApiPlatform\Doctrine\Filter\DataGridFilter: ~ Nubit\ApiPlatform\OpenApi\TranslatedDocumentationNormalizer: decorates: api_platform.hydra.normalizer.documentation arguments: $inner: '@.inner' $translator: '@translator' $requestStack: '@request_stack' $apiLocale: '%env(APP_API_LOCALE)%' Nubit\ApiPlatform\Http\ApiResponseListener: ~ Nubit\ApiPlatform\Http\ExceptionListener: ~ # Your virtual grid fields, if any App\Grid\MyVirtualFields: tags: ['nubit.api_platform.grid_virtual_field']
License
MIT