picamator / transfer-object
A modern Symfony-compatible Transfer Object Generator with property hooks, FixedArray, and asymmetric visibilities.
Requires
- php: >=8.5
- composer-runtime-api: ^2.2
- symfony/console: ^8.0
- symfony/filesystem: ^8.0
- symfony/finder: ^8.0
- symfony/yaml: ^8.0
Requires (Dev)
- captainhook/captainhook: ^5.27
- phpstan/phpstan: ^2.1
- phpstan/phpstan-strict-rules: ^2.0
- phpunit/phpunit: ^13.0
- slevomat/coding-standard: ^8.24
- squizlabs/php_codesniffer: ^4.0
- symfony/validator: ^8.0
- symfony/var-dumper: ^8.0
Suggests
- ext-bcmath: Provides support for 'numberType'.
- symfony/validator: Adds support for attribute asserts using the 'sf-assert' shortcut.
- dev-main
- 5.6.0
- 5.5.1
- 5.5.0
- 5.4.6
- 5.4.5
- 5.4.4
- 5.4.3
- 5.4.2
- 5.4.1
- 5.4.0
- 5.3.3
- 5.3.2
- 5.3.1
- 5.3.0
- 5.2.0
- 5.1.0
- 5.0.0
- 4.0.0
- 3.1.0
- 3.0.6
- 3.0.5
- 3.0.4
- 3.0.3
- 3.0.2
- 3.0.1
- 3.0.0
- 2.3.0
- 2.2.4
- 2.2.3
- 2.2.2
- 2.2.1
- 2.2.0
- 2.1.3
- 2.1.2
- 2.1.1
- 2.1.0
- 2.0.4
- 2.0.3
- 2.0.2
- 2.0.1
- 2.0.0
- 1.9.0
- 1.8.0
- 1.7.0
- 1.6.0
- 1.5.3
- 1.5.2
- 1.5.1
- 1.5.0
- 1.4.1
- 1.4.0
- 1.3.1
- 1.3.0
- 1.2.0
- 1.1.0
- 1.0.0
- dev-development
- dev-feature/file-rotation-cache
This package is auto-updated.
Last update: 2026-03-07 17:04:32 UTC
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 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 Compatibility:
- Provides Symfony console command:
- Includes Symfony services:
- Enables automatic Symfony request query data mapping
- Supports Symfony validator attributes
Transfer Object:
- Offers methods:
fromArray()toArray()
- Implements standard interfaces:
IteratorAggregateJsonSerializableCountable
- Handles embedded and collection transfer objects.
- Works with PHP primitive data types.
- Extends compatibility to advanced types:
BackedEnumDateTimeDateTimeImmutableBcMath\Number
- Supports asymmetric property visibility.
- Integrates with external transfer objects.
Installation
Composer installation:
The Transfer Object Generator is available on Packagist and can be installed using Composer:
$ composer require picamator/transfer-object
| Version | PHP | Symfony |
|---|---|---|
| ≤ 4.0.0 | 8.4 | 7.3 |
| ≥ 5.0.0 | 8.5 | 8.0 |
Directory Structure:
After installation, the following directory structure is recommended:
src/Generated: transfer objects directorysrc/config/generator.config.yml: generator's configuration filesrc/config/definition/*.transfer.yml: transfer objects definition files, where each of them groups transfer objects definitions by business domain, e.g.payment.transfer.yml,sales.transfer.yml, etc.
With this setup, generator.config.yml looks like:
# $schema: ./../vendor/picamator/transfer-object/schema/config.schema.json generator: transferNamespace: "YourVendorNamespace\\YourProjectNamespace\\Generated" transferPath: "${PROJECT_ROOT}/src/Generated" definitionPath: "${PROJECT_ROOT}/config/definition"
Where YourVendorNamespace\\YourProjectNamespace should be replaced with
your vendor and project namespace.
Additionally, .gitignore should contain:
# transfer objects
src/Generated/_tmp
src/Generated/transfer.lock
Then, running command generates transfer objects:
$ ./vendor/bin/transfer-generate -c config/generator.config.yml
Tip
For large projects, each module can have its own generator configuration. Please use bulk command to generate transfer objects for the multi-configuration setup.
Documentation
Publications
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.
Security Commitment
The project applies OpenSSF Best Practices.
For reporting security vulnerabilities, please follow Security Policy.
License
Transfer Object Generator is free and open-source software licensed under the MIT License.
For more details, please see the LICENSE file.
