valeryq/dto

There is no license information available for the latest version (1.0.0) of this package.

Laravel array formatter similarity DTO

1.0.0 2015-01-15 07:55 UTC

This package is not auto-updated.

Last update: 2024-11-09 18:01:13 UTC


README

#Laravel array formatter similarity DTO#

Introduction

Laravel can serialize EloquentModel or EloquentCollection to array, but it can't get only certain data (for example: return JSON from controller). DTO can return to response only certain data large nested.

Installation

Require this package in your composer.json and update composer. This will download the package.

"valeryq/dto": "1.0.0"

After updating composer, add the ServiceProvider to the providers array in app/config/app.php

'Valeryq\DTO\DTOServiceProvider',

You can use the facade for shorter code. Add this to your aliases:

'DTO' => 'Valeryq\DTO\DTOFacade',

How it use

Eloquent model example:

class UserController extends \BaseController 
{
    public function getUser() 
    {
        $user = UserModel::find(1);

        return DTO::make($user)->only(['id', 'firstname']);

        or
     
        return DTO::make($user)->except(['lastname']);
    }   
}

Eloquent collection example:

class UserController extends \BaseController 
{
    public function getUser() 
    {
        $user = UserModel::where('firstname', 'Test')->get();

        return DTO::make($user)->only(['id', 'firstname']);

        or
     
        return DTO::make($user)->except(['lastname']);
    }   
}

Nested objects:

class UserController extends \BaseController 
{
    public function getUser() 
    {
        $user = UserModel::with('posts')->find(1);

        return DTO::make($user)->only(['id', 'firstname', 'posts.id', 'posts.body']);

        or
     
        return DTO::make($user)->except(['lastname', 'posts.body']);
    }   
}