picamator / transfer-object
A modern Symfony-compatible Transfer Object Generator with property hooks, FixedArray, and asymmetric visibilities.
Requires
- php: >=8.4
- composer-runtime-api: ^2.2
- psr/container: ^2.0
- symfony/console: ^7.0
- symfony/filesystem: ^7.0
- symfony/finder: ^7.0
- symfony/yaml: ^7.0
Requires (Dev)
- captainhook/captainhook: ^5.24
- phpstan/phpstan: ^2.0
- phpstan/phpstan-strict-rules: ^2.0
- phpunit/phpunit: ^12.0
- slevomat/coding-standard: ^8.18
- squizlabs/php_codesniffer: ^3.11
Suggests
- ext-bcmath: Required for supporting BcMath Number.
README
Transfer Object Generator
Would you like to build Symfony-compatible Transfer Objects?
You're in the right place! 🎉
Imagine you have a Rest API response:
{ "firstName": "Jan", "lastName": "Kowalski" }
Running the following interactive console command:
$ ./vendor/bin/definition-generate
Generates a YML
definition file:
Customer: firstName: type: string lastName: type: string
Then, running another console command:
$ ./vendor/bin/transfer-generate [-c|--configuration CONFIGURATION]
Builds the Transfer Object:
$customerTransfer = new CustomerTransfer(); $customerTransfer->firstName = 'Jan'; $customerTransfer->lastName = 'Kowalski';
Key Features
Symfony Compatability:
- Provides Symfony console command:
- Includes Symfony services:
- Enables Symfony request data mapping.
Transfer Object:
- Offers methods:
fromArray()
toArray()
toFilterArray()
- Implements standard interfaces:
IteratorAggregate
JsonSerializable
Countable
- Handles embedded and collection Transfer Objects.
- Works with PHP primitive data types.
- Extends compatibility to advanced types:
BackedEnum
DateTime
DateTimeImmutable
BcMath\Number
- Supports asymmetric property visibility.
- Integrates with external Transfer Objects.
Installation
Composer installation:
$ composer require picamator/transfer-object
Examples
Usage Tests
Definition Files and Transfer Object generators have been tested against the following APIs:
- NASA Open Api
- OpenWeather
- Content API for Shopping
- Frankfurter is a free, open-source currency data API
- Tagesschau API
Scenario
- Rest API response is used as a blueprint to generate Definition Files
- Transfer Objects are generated based on Definition Files
- Transfer Object instance is created with the API response
- Transfer Object is converted back to the array
- The converted array is compared with the API response
For all APIs, data are ✅ matched.
For detailed information, please check DefinitionGeneratorFacadeTest.
Documentation
For more details, please visit project's wiki.
Acknowledgment
Many thanks ❤️ for your contribution, support, feedback and simply using the Transfer Object Generator!
Contribution
If you find this project useful, please ⭐ star the repository. Follow the project to stay updated with all activities.
If you have suggestions for improvements or new features, feel free to:
- Create an issue
- Submit a pull request
Here is a Contribution Guide.
This project is released with a Code of Conduct. By participating in this project and its community, you agree to abide by those terms.
License
Transfer Object Generator is free and open-source software licensed under the MIT License.
For more details, please see the LICENSE file.