Skip to content

v1.14.0

Choose a tag to compare

@yuriizee yuriizee released this 25 Jul 18:51

What's New

#[Discriminator] — polymorphic hydration for DTOs

Abstract data classes can now dispatch from() to the right concrete subclass based on a field value — the PHP equivalent of Rust serde's tagged enums or pydantic's discriminated unions:

#[Discriminator(field: 'type', map: [
    'card' => CardPaymentData::class,
    'bank' => BankPaymentData::class,
])]
abstract class PaymentMethodData extends BaseData {}

PaymentMethodData::from(['type' => 'card', ...]); // => CardPaymentData