Data Transfer Objects complete with castable attributes and validation.
bkief29/laravel-dto is a Laravel package for data transfer objects complete with castable attributes and validation..
It currently has 2 GitHub stars and 641 downloads on Packagist (latest version 0.2.1).
Install it with composer require bkief29/laravel-dto.
Discover more Laravel packages by bkief29
or browse all Laravel packages to compare alternatives.
Last updated
Data Transfer Objects complete with castable attributes and validation.
Implement https://github.com/laravel/framework/tree/2b395cd1f2fe95b67edf97684f09b7c5c4a55152/src/Illuminate/Database/Eloquent/Concerns
<?php
namespace Domain\DTO\Requests;
use bkief29\DTO\DataTransferObject;
/**
* Class PricesRequest.
*/
class PricesRequest extends DataTransferObject
{
/**
* @var string
*/
public $serviceCode;
/**
* @var string
*/
public $effectiveDate;
/**
* @var int
*/
public $quantity;
protected $casts = [
'serviceCode' => 'string',
'quantity' => 'int',
];
protected $dates = [
'effectiveDate'
];
public function getEffectiveDateAttribute($date)
{
return $date->format($this->getDateFormat());
}
// OR
public function getEffectiveDateAttribute()
{
return $this->getOriginal('effectiveDate')->format($this->getDateFormat());
}
}
class User extends DataTransferObject
{
...
public function getNameAttribute($value)
{
return ucwords($value);
}
// OR
public function getNameAttribute()
{
return ucwords($this->getOriginal('name'));
}
}
echo $array['name'];
// john smith
$user = new User($array);
echo $user->name; // John Smith
echo $user['name']; // John Smith
echo $user->getAttribute('name'); // John Smith
echo $user->getOriginal('name'); // john smith
Cast variables to other DTOs automatically
class PostData extends DataTransferObject
{
/** @var string */
public $title;
/** @var string|null */
public $body;
/** @var App\DataTransferObjects\Author */
public $author;
/** @var App\DataTransferObjects\Tag[] */
public $tags;
}
$postData = new $postData($array);
$postData->author; // Instance of App\DataTransferObjects\Author
$postData->tags; // Array of App\DataTransferObjects\Tag
$postData->all();
$postData
->only('title', 'body')
->toArray();
$postData
->except('author')
->toArray();
$postData->toCollection();