From 9bdad1bcda8a2ebc0495c921b0600d1f8fc7273b Mon Sep 17 00:00:00 2001 From: Wendell Adriel Date: Mon, 13 Oct 2025 13:53:04 +0100 Subject: [PATCH] Fix issue when using DTOCast with Cast attribute --- src/SimpleDTO.php | 8 +++++--- tests/Datasets/CallableCastingDTOInstance.php | 3 ++- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/SimpleDTO.php b/src/SimpleDTO.php index 0bb3364..5d8c3a6 100644 --- a/src/SimpleDTO.php +++ b/src/SimpleDTO.php @@ -23,6 +23,7 @@ use WendellAdriel\ValidatedDTO\Attributes\Rules; use WendellAdriel\ValidatedDTO\Casting\ArrayCast; use WendellAdriel\ValidatedDTO\Casting\Castable; +use WendellAdriel\ValidatedDTO\Casting\DTOCast; use WendellAdriel\ValidatedDTO\Casting\EnumCast; use WendellAdriel\ValidatedDTO\Concerns\DataResolver; use WendellAdriel\ValidatedDTO\Concerns\DataTransformer; @@ -311,9 +312,10 @@ protected function buildCasts(): array continue; } - $param = $cast->type === EnumCast::class - ? $cast->param - : new $cast->param(); + $param = match (true) { + in_array($cast->type, [EnumCast::class, DTOCast::class]) => $cast->param, + default => new $cast->param(), + }; $casts[$property] = new $cast->type($param); } diff --git a/tests/Datasets/CallableCastingDTOInstance.php b/tests/Datasets/CallableCastingDTOInstance.php index c8c0632..ce2089e 100644 --- a/tests/Datasets/CallableCastingDTOInstance.php +++ b/tests/Datasets/CallableCastingDTOInstance.php @@ -4,12 +4,14 @@ namespace WendellAdriel\ValidatedDTO\Tests\Datasets; +use WendellAdriel\ValidatedDTO\Attributes\Cast; use WendellAdriel\ValidatedDTO\Casting\DTOCast; use WendellAdriel\ValidatedDTO\Exceptions\CastException; use WendellAdriel\ValidatedDTO\SimpleDTO; class CallableCastingDTOInstance extends SimpleDTO { + #[Cast(DTOCast::class, SimpleNameDTO::class)] public SimpleNameDTO $name; public ?int $age = null; @@ -22,7 +24,6 @@ protected function defaults(): array protected function casts(): array { return [ - 'name' => new DTOCast(SimpleNameDTO::class), 'age' => function (string $property, mixed $value) { if (! is_numeric($value)) { throw new CastException($property);