PHP code example of hdaklue / laravel-dto-morph-cast
1. Go to this page and download the library: Download hdaklue/laravel-dto-morph-cast library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
hdaklue / laravel-dto-morph-cast example snippets
use HDaklue\LaravelDTOMorphCast\MorphCast;
use WendellAdriel\ValidatedDTO\ValidatedDTO;
use WendellAdriel\ValidatedDTO\Casting\Castable;
class MyDTO extends ValidatedDTO implements Castable
{
public function casts(): array
{
return [
'commentable' => new MorphCast(), // Will look for 'commentable_type' key
'user' => new MorphCast(['password', 'api_token']), // Hide sensitive fields
];
}
}
use Illuminate\Database\Eloquent\Relations\Relation;
// In a service provider boot method
Relation::morphMap([
'post' => App\Models\Post::class,
'video' => App\Models\Video::class,
'user' => App\Models\User::class,
]);
$data = [
'commentable_type' => 'post', // This maps to App\Models\Post via morph map
'commentable' => [
'id' => 1,
'title' => 'My Post Title',
'content' => 'Post content...',
'created_at' => '2024-01-01 00:00:00'
]
];
$dto = new MyDTO($data);
// The 'commentable' property will be cast to a Post model instance
$post = $dto->commentable; // instanceof App\Models\Post
echo $post->title; // "My Post Title"
use HDaklue\LaravelDTOMorphCast\MorphCast;
use WendellAdriel\ValidatedDTO\ValidatedDTO;
use WendellAdriel\ValidatedDTO\Casting\Castable;
class MyDTO extends ValidatedDTO implements Castable
{
public function casts(): array
{
return [
'user' => new MorphCast(), // Normal casting
'sensitive_user' => new MorphCast(['password', 'secret_key']), // Hide sensitive fields
];
}
}
public function casts(): array
{
return [
'user' => MorphCast::class,
'sensitive_user' => [MorphCast::class, ['password', 'api_token', 'secret']],
];
}
$data = [
'sensitive_user_type' => 'user',
'sensitive_user' => [
'id' => 1,
'name' => 'John Doe',
'email' => '[email protected]',
'password' => 'secret123', // This will be hidden
'api_token' => 'token123', // This will be hidden
'created_at' => '2024-01-01 00:00:00'
]
];
$dto = new MyDTO($data);
$user = $dto->sensitive_user;
// Only non-sensitive data is available
echo $user->name; // "John Doe"
echo $user->email; // "[email protected]"
// $user->password and $user->api_token are not set
class CustomMorphCast extends MorphCast
{
protected function resolveMorphKeys(string $property): array
{
return [
"custom_{$property}_type", // Custom type key format
"custom_{$property}_id", // Custom ID key format
];
}
}
// Missing morph type key
// Throws: "MorphCast: Missing morph type key [commentable_type] in DTO data."
// Invalid model class
// Throws: "MorphCast: Invalid model class [InvalidClass]."
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.