Skip to content

Micro-PHP/dto

Folders and files

NameName
Last commit message
Last commit date
Feb 18, 2023
Feb 17, 2023
Feb 17, 2023
Feb 18, 2023
Feb 15, 2023
Feb 17, 2023
Feb 15, 2023
Feb 15, 2023
Feb 16, 2023
Feb 18, 2023
Feb 15, 2023
Feb 15, 2023
Feb 15, 2023
Feb 15, 2023

Repository files navigation

DTO Generator

PHP library for generating DTO classes.

Installation

Use the package manager composer to install micro/dto.

composer require micro/dto

Usage

Declare all required classes in the XML Schemea

  • example.xml
  • See the full list of possible options in the XSD schema
<?xml version="1.0"?>
<dto xmlns="micro:dto-1.6"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="micro:dto-1.6 https://raw.githubusercontent.com/Micro-PHP/dto/master/src/Resource/schema/dto-1.6.xsd">
    <class name="User\User">
        <property name="email" type="string">
            <validation>
                <not_blank/>
                <email/>
            </validation>
        </property>
        <property name="username" type="string">
          <validation>
               <length min="6" max="50"/>
               <regex pattern="/^(.[aA-zA]+)$/"/>
          </validation>
        </property>
        <property name="age" type="int">
            <validation>
                <not_blank groups="put"/>
                <greater_than value="18" />
                <less_than value="100" groups="put, patch" />
            </validation>
        </property>
        <property name="updatedAt" type="datetime" />
        <property name="parent" type="User\User" /> 
    </class>
</dto>
  • And run generator
$classGenerator = new \Micro\Library\DTO\ClassGeneratorFacadeDefault(
    ['./example.xml'],    // List of class declaration files
    './out',              // Path to the folder where to generate 
    'Transfer'            // Suffix for the all DTO classes (optional)
);
$classGenerator->generate();

// Usage example
$user = new \User\UserTransfer();
$user
    ->setAge(19)
    ->setEmail('demo@micro-php.net');
// OR
//
$user['age'] = 19;
$user['email'] = 'demo@micro-php.net';

// Validation example
$validator = new \Micro\Library\DTO\ValidatorFacadeDefault(); 
$validator->validate($user); // Validation groups by default ["Default"]   
$validator->validate($user, ['patch', 'put']); // Set validation groups ["patch", "put"]

// Serialize example
$serializer = new \Micro\Library\DTO\SerializerFacadeDefault();
$serializer->toArray($user); // Simple array
$serializer->toJson($user); // Simple Json

// Deserialize example
$serialized = $serializer->toJsonTransfer($user);
$deserialized = $serializer->fromJsonTransfer($serialized);

Contributing

Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.

License

MIT