owlnext-fr / dto-export
Symfony + API Platform vendor for exporting API DTOs into other languages for front-end easy integration.
Installs: 32
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/owlnext-fr/dto-export
Requires
- php: >= 8.0
- symfony/console: ^6.1
- symfony/twig-bundle: ^6.1
This package is auto-updated.
Last update: 2025-10-19 01:48:23 UTC
README
Symfony + API Platform vendor for exporting API DTOs into other languages for front-end easy integration.
Installation
1. Install the bundle
composer require owlnext-fr/dto-export
2. Configure twig paths
# config/packages/twig.yaml twig: #... paths: '%kernel.project_dir%/vendor/owlnext-fr/dto-export/templates': 'owlnext_fr.dto_export'
Usage
1. Create a DTO class
# src/Dto/Output/UserOutputDTO.php <?php namespace App\Dto\Output; class UserOutputDTO { public int $id; public string $name; }
2. Add the tag app.exportable_dto to your class
With annotation
# src/Dto/Output/UserOutputDTO.php use Symfony\Component\DependencyInjection\Attribute\AutoconfigureTag; #[AutoconfigureTag('app.exportable_dto')] class UserOutputDTO { public int $id; public string $name; }
With interface implementation
To avoid the use of the AutoconfigureTag annotation in each of your DTOs, you can create a ExportableDTOInterface interface and implement it in your DTOs.
# src/Dto/Impl/ExportableDTOInterface.php namespace App\Dto\Impl; use Symfony\Component\DependencyInjection\Attribute\AutoconfigureTag; #[AutoconfigureTag('app.exportable_dto')] interface ExportableDTOInterface {}
# src/Dto/Output/UserOutputDTO.php use App\Dto\Impl\ExportableDTOInterface; class UserOutputDTO implements ExportableDTOInterface { public int $id; public string $name; }
handle array of something
For array of primitives, scalars and object, you will have to add another attribute to your field using an array. It will help the exporter to know what type of data is in the array and transform it correctly.
Here is an example with an array of strings:
# src/Dto/Output/UserOutputDTO.php # ... use OwlnextFr\DtoExport\Attribute\ListOf; class UserOutputDTO implements ExportableDTOInterface { #... #[ListOf(type: 'string')] /** @var string[] $roles list roles for this user. */ public array $roles; }
Here is an example with an array of objects:
# src/Dto/Output/UserOutputDTO.php # ... use OwlnextFr\DtoExport\Attribute\ListOf; use App\DTO\Output\SkillOutputDTO; class UserOutputDTO implements ExportableDTOInterface { #... #[ListOf(type: SkillOutputDTO::class)] /** @var SkillOutputDTO[] $roles list skills of this user. */ public array $skills; }
3. Export your DTOs
Basic usage:
symfony console dto:export ...
For dart language:
symfony console dto:export <path to export> --type=dart --project-name=<project name>
For typescript language:
symfony console dto:export <path to export> --type=typescript