bkief29 / laravel-dto
Data Transfer Objects complete with castable attributes and validation.
0.2.1
2021-09-13 14:59 UTC
Requires
- php: >=7.2
- illuminate/support: >=6
- spatie/data-transfer-object: ^1
Requires (Dev)
- orchestra/testbench: ^5.1
- phpunit/phpunit: ^8.5
This package is auto-updated.
Last update: 2024-12-14 04:44:24 UTC
README
Data Transfer Objects complete with castable attributes and validation.
TODO
Example
<?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()); } }
Usage
Mutators
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
Types
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
Helpers
$postData->all(); $postData ->only('title', 'body') ->toArray(); $postData ->except('author') ->toArray(); $postData->toCollection();