SyliusResourceBundle
SyliusResourceBundle copied to clipboard
Add support for DTOs
Q | A |
---|---|
Bug fix? | no |
New feature? | yes |
BC breaks? | no |
Deprecations? | no |
Related tickets | |
License | MIT |
DTO support for create and update operations.
Routes
app_register_user:
path: /users/register
methods: [POST]
defaults:
_controller: app.controller.user:createAction
_sylius:
input: App\Dto\Register
output: App\Dto\User
form: App\Form\Type\RegisterType
<?php
namespace App\Entity;
use App\Dto\Register;
use App\Dto\User as DtoUser;
#[SyliusRoute(
name: 'register',
path: '/register',
methods: ['GET', 'POST'],
controller: 'app.controller.user:createAction',
form: RegisterType::class,
input: Register::class,
output: DtoUser::class
)]
class User
Data transformers
<?php
declare(strict_types=1);
namespace App\DataTransformer;
use App\Dto\Register;
use App\Entity\User;
use Sylius\Bundle\ResourceBundle\Controller\RequestConfiguration;
use Sylius\Bundle\ResourceBundle\DataTransformer\DataTransformerInterface;
use Webmozart\Assert\Assert;
final class RegisterToUserEntityDataTransformer implements DataTransformerInterface
{
public function transform(object $data, string $to, RequestConfiguration $configuration): User
{
Assert::isInstanceOf($data, Register::class);
$user = new User();
$user->setUsername($data->username);
$user->setPassword($data->password);
return $user;
}
public function supportsTransformation(object $data, string $to, RequestConfiguration $configuration): bool
{
return $data instanceof Register && is_a($to, User::class, true);
}
}
<?php
declare(strict_types=1);
namespace App\DataTransformer;
use App\Dto\User;
use App\Entity\User as UserEntity;
use Sylius\Bundle\ResourceBundle\Controller\RequestConfiguration;
use Sylius\Bundle\ResourceBundle\DataTransformer\DataTransformerInterface;
use Webmozart\Assert\Assert;
final class UserEntityToDtoDataTransformer implements DataTransformerInterface
{
public function transform(object $data, string $to, RequestConfiguration $configuration): User
{
Assert::isInstanceOf($data, UserEntity::class);
return new User($data->getUsername() ?: '');
}
public function supportsTransformation(object $data, string $to, RequestConfiguration $configuration): bool
{
return $data instanceof UserEntity && is_a($to, User::class, true);
}
}
-
[x] create
- [x] input
- [x] output
-
[x] update
- [x] input
- [x] output
-
[x] Remove bc-break with resource form factory