v1.14.0
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