picamator/transfer-object

A modern Symfony-compatible Transfer Object Generator with property hooks, FixedArray, and asymmetric visibilities.

Maintainers

Package info

github.com/picamator/transfer-object

Wiki

pkg:composer/picamator/transfer-object

Statistics

Installs: 66

Dependents: 0

Suggesters: 0

Stars: 21

Open Issues: 0

5.6.0 2026-03-07 17:02 UTC

README

Transfer Object Generator

CI workflow License OpenSSF Best Practices PHP Version Require Symfony Compatibility Wiki Latest Stable Version

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:

Transfer Object:

  • Offers methods:
    • fromArray()
    • toArray()
  • 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:

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 directory
  • src/config/generator.config.yml: generator's configuration file
  • src/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

  1. Sergii Pryz, "Data Transfer Objects and Property Hooks" PHP Architect Magazine, June 2025

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.