Transforming DTO Data
You can convert your DTO to some formats:
To array
$dto = new UserDTO([
'name' => 'John Doe',
'email' => 'john.doe@example.com',
'password' => 's3CreT!@1a2B',
]);
$dto->toArray();
// [
// "name" => "John Doe",
// "email" => "john.doe@example.com",
// "password" => "s3CreT!@1a2B",
// ]
To JSON string
$dto = new UserDTO([
'name' => 'John Doe',
'email' => 'john.doe@example.com',
'password' => 's3CreT!@1a2B',
]);
$dto->toJson();
// '{"name":"John Doe","email":"john.doe@example.com","password":"s3CreT!@1a2B"}'
$dto->toPrettyJson(); // OR LIKE THIS
// {
// "name": "John Doe",
// "email": "john.doe@example.com",
// "password": "s3CreT!@1a2B"
// }
To Eloquent Model
$dto = new UserDTO([
'name' => 'John Doe',
'email' => 'john.doe@example.com',
'password' => 's3CreT!@1a2B',
]);
$dto->toModel(\App\Models\User::class);
// App\Models\User {#3776
// name: "John Doe",
// email: "john.doe@example.com",
// password: "s3CreT!@1a2B",
// }
Custom transforming
If you want to build your own Data Transformer, you can use the buildDataForExport()
method to retrieve the validated data with your custom mappings.
public function toObject(): object
{
return (object) $this->buildDataForExport();
}
Transforming Nested Data
Be aware that when transforming the DTO, all the properties are also going to be transformed:
Scalar Data Type
and Array
properties will preserve their values.
stdClass
properties will be transformed into arrays using type casting.
UnitEnum
properties are going to be transformed into the case name.
BackedEnum
properties are going to be transformed into the case value.
Carbon
and CarbonImmutable
properties are going to be transformed into strings using the ->toISOString()
method.
Collection
, Model
and DTO
properties will have their nested data transformed using the same logic as above.
Last updated
Was this helpful?