Skip to content
Property AttributeHydration Stage

CastWith

CastWith allows you to automatically cast values during DTO hydration. You can cast to DTOs, or use built-in casters for primitives, enums, and dates.

CastWith accepts any of the following:

  • A DTO class-string (e.g. User::class) to auto-cast arrays/collections to that DTO
  • A caster class-string (e.g. PrimitiveCaster::class)
  • A caster instance (e.g. new PrimitiveCaster('int'))

Casting to DTOs

Automatically cast a property into a specific DTO (or array of DTOs):

php
use Alamellama\Carapace\Attributes\CastWith;

class Account extends Data
{
    public function __construct(
        public string $name,

        #[CastWith(User::class)]
        /** @var User[] */
        public array $users,
    ) {}
}
php
$account = Account::from([
    'name' => 'Me, Myself and I',
    'users' => [
        ['name' => 'John', 'email' => 'john@example.com'],
        ['name' => 'Jane', 'email' => 'jane@example.com'],
    ],
]);

TIP

The @var annotation helps IDEs understand the type of the users property. Carapace will automatically cast each array item to the specified DTO type via CastWith.

Built-in casters

Custom Casters

For information on creating your own custom casters, see the Custom Casters guide in the Advanced section.