Skip to content

Mapping Attributes

Reference for property mapping attributes.

SimpleDTO provides 2 mapping attributes:

  • #[MapFrom(string $source)] - Map from different input key
  • #[MapTo(string $target)] - Map to different output key

Map input data from a different key:

use Event4u\DataHelpers\SimpleDTO\Attributes\MapFrom;
#[MapFrom('full_name')]
public readonly string $name;
#[MapFrom('email_address')]
public readonly string $email;
#[MapFrom('contact.email')]
public readonly string $email;
#[MapFrom('address.city.name')]
public readonly string $city;
#[MapFrom(['user.email', 'user.mail', 'email'])]
public readonly string $email;

Map output data to a different key:

use Event4u\DataHelpers\SimpleDTO\Attributes\MapTo;
#[MapTo('full_name')]
public readonly string $name;
#[MapTo('email_address')]
public readonly string $email;
#[MapTo('user.profile.email')]
public readonly string $email;
// Output: ['user' => ['profile' => ['email' => '...']]]
#[MapFrom('user_name'), MapTo('user_name')]
public readonly string $userName;
class UserDTO extends SimpleDTO
{
public function __construct(
#[MapFrom('user_id')]
public readonly int $id,
#[MapFrom('user_name')]
public readonly string $name,
#[MapFrom('user_email')]
public readonly string $email,
) {}
}
class OrderDTO extends SimpleDTO
{
public function __construct(
#[MapFrom('order_id')]
public readonly int $id,
#[MapFrom('customer_name')]
public readonly string $customerName,
) {}
}
// MapFrom + Validation
#[MapFrom('user_email'), Required, Email]
public readonly string $email;
// MapFrom + Cast
#[MapFrom('created_at'), Cast(DateTimeCast::class)]
public readonly Carbon $createdAt;
// ✅ Good
#[MapFrom('usr_nm')]
public readonly string $userName;
// ❌ Bad
#[MapFrom('usr_nm')]
public readonly string $usrNm;