Symfony integration for php-collective/dto.
composer require php-collective/symfony-dtoRegister the bundle in config/bundles.php:
return [
// ...
PhpCollective\SymfonyDto\PhpCollectiveDtoBundle::class => ['all' => true],
];Create config/packages/php_collective_dto.yaml:
php_collective_dto:
config_path: 'config/' # Where DTO config files are located
output_path: 'src/' # Where to generate DTOs
namespace: 'App' # Namespace for generated DTOsCreate config/dto.xml:
<?xml version="1.0" encoding="UTF-8"?>
<dtos xmlns="php-collective-dto">
<dto name="User">
<field name="id" type="int"/>
<field name="name" type="string"/>
<field name="email" type="string"/>
</dto>
</dtos>bin/console dto:generateOptions:
--dry-run- Preview changes without writing files--config-path- Override config path--output-path- Override output path--namespace- Override namespace-v- Verbose output
use App\Dto\UserDto;
use Symfony\Component\HttpFoundation\JsonResponse;
class UserController
{
public function create(): JsonResponse
{
$user = new UserDto();
$user->setId(1);
$user->setName('John Doe');
$user->setEmail('john@example.com');
return new JsonResponse($user->toArray());
}
}Or create from an array:
$user = UserDto::createFromArray([
'id' => 1,
'name' => 'John Doe',
'email' => 'john@example.com',
]);The bundle supports multiple config file formats:
dto.xmlordtos.xml- XML formatdto.yml/dto.yamlordtos.yml/dtos.yaml- YAML formatdto.phpordtos.php- PHP formatdto/subdirectory with multiple files
MIT