LaravelPackages.net
Acme Inc.
Toggle sidebar
bkief29/laravel-dto

Data Transfer Objects complete with castable attributes and validation.

641
2
0.2.1
About bkief29/laravel-dto

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

laravel-dto

Data Transfer Objects complete with castable attributes and validation.

Build Status Latest Stable Version Total Downloads Latest Unstable Version

TODO

Implement https://github.com/laravel/framework/tree/2b395cd1f2fe95b67edf97684f09b7c5c4a55152/src/Illuminate/Database/Eloquent/Concerns

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();

Star History Chart