2017 © Pedro Peláez
 

library laravel5-json

Laravel 5 Json API Transformer Package

image

nilportugues/laravel5-json

Laravel 5 Json API Transformer Package

  • Sunday, March 6, 2016
  • by nilportugues
  • Repository
  • 1 Watchers
  • 2 Stars
  • 434 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 2 Forks
  • 1 Open issues
  • 16 Versions
  • 0 % Grown

The README.md

Laravel 5 JSON Transformer Package

Scrutinizer Code Quality SensioLabsInsight Latest Stable Version Total Downloads License Donate, (*1)

Compatible with Laravel 5.0, 5.1 & 5.2, (*2)

Installation

Use Composer to install the package:, (*3)

$ composer require nilportugues/laravel5-json

Laravel 5 / Lumen Configuration

Step 1: Add the Service Provider, (*4)

Laravel, (*5)

Open up config/app.php and add the following line under providers array:, (*6)

'providers' => [

    //...
    \NilPortugues\Laravel5\Json\Laravel5JsonServiceProvider::class,
],

Lumen, (*7)

Open up bootstrap/app.phpand add the following lines before the return $app; statement:, (*8)

$app->register(\NilPortugues\Laravel5\Json\Laravel5JsonServiceProvider::class);
$app->configure('json');

Also, enable Facades by uncommenting:, (*9)

$app->withFacades();

Step 2: Add the mapping, (*10)

Create a json.php file in config/ directory. This file should return an array returning all the class mappings., (*11)

Step 3: Usage, (*12)

For instance, lets say the following object has been fetched from a Repository , lets say PostRepository - this being implemented in Eloquent or whatever your flavour is:, (*13)

use Acme\Domain\Dummy\Post;
use Acme\Domain\Dummy\ValueObject\PostId;
use Acme\Domain\Dummy\User;
use Acme\Domain\Dummy\ValueObject\UserId;
use Acme\Domain\Dummy\Comment;
use Acme\Domain\Dummy\ValueObject\CommentId;

//$postId = 9;
//PostRepository::findById($postId); 

$post = new Post(
  new PostId(9),
  'Hello World',
  'Your first post',
  new User(
      new UserId(1),
      'Post Author'
  ),
  [
      new Comment(
          new CommentId(1000),
          'Have no fear, sers, your king is safe.',
          new User(new UserId(2), 'Barristan Selmy'),
          [
              'created_at' => (new \DateTime('2015/07/18 12:13:00'))->format('c'),
              'accepted_at' => (new \DateTime('2015/07/19 00:00:00'))->format('c'),
          ]
      ),
  ]
);

And a series of mappings, placed in config/json.php, that require to use named routes so we can use the route() helper function:, (*14)

<?php
//config/json.php
return [
    [
        'class' => 'Acme\Domain\Dummy\Post',
        'alias' => 'Message',
        'aliased_properties' => [
            'author' => 'author',
            'title' => 'headline',
            'content' => 'body',
        ],
        'hide_properties' => [

        ],
        'id_properties' => [
            'postId',
        ],
        'urls' => [
            'self' => ['name' => get_post'], //named route
            'comments' => ['name' => 'get_post_comments'], //named route
        ],
    ],
    [
        'class' => 'Acme\Domain\Dummy\ValueObject\PostId',
        'alias' => '',
        'aliased_properties' => [],
        'hide_properties' => [],
        'id_properties' => [
            'postId',
        ],
        'urls' => [
            'self' => ['name' => 'get_post'], //named route
        ],
    ],
    [
        'class' => 'Acme\Domain\Dummy\User',
        'alias' => '',
        'aliased_properties' => [],
        'hide_properties' => [],
        'id_properties' => [
            'userId',
        ],
        'urls' => [
            'self' => ['name' => 'get_user'], //named route
            'friends' => ['name' => 'get_user_friends'], //named route
            'comments' => ['name' => 'get_user_comments'], //named route
        ],
    ],
    [
        'class' => 'Acme\Domain\Dummy\ValueObject\UserId',
        'alias' => '',
        'aliased_properties' => [],
        'hide_properties' => [],
        'id_properties' => [
            'userId',
        ],
        'urls' => [
            'self' => ['name' => 'get_user'], //named route
            'friends' => ['name' => 'get_user_friends'], //named route
            'comments' => ['name' => 'get_user_comments'], //named route
        ],
    ],
    [
        'class' => 'Acme\Domain\Dummy\Comment',
        'alias' => '',
        'aliased_properties' => [],
        'hide_properties' => [],
        'id_properties' => [
            'commentId',
        ],
        'urls' => [
            'self' => ['name' => 'get_comment'], //named route
        ],
    ],
    [
        'class' => 'Acme\Domain\Dummy\ValueObject\CommentId',
        'alias' => '',
        'aliased_properties' => [],
        'hide_properties' => [],
        'id_properties' => [
            'commentId',
        ],
        'urls' => [
            'self' => ['name' => 'get_comment'], //named route
        ],
    ],
];

The named routes belong to the app/Http/routes.php. Here's a sample for the routes provided mapping:, (*15)

Laravel, (*16)

Route::get(
  '/post/{postId}',
  ['as' => 'get_post', 'uses' => 'PostController@getPostAction']
);

Route::get(
  '/post/{postId}/comments',
  ['as' => 'get_post_comments', 'uses' => 'CommentsController@getPostCommentsAction']
);

//...

Lumen, (*17)

$app->get(
  '/post/{postId}',
  ['as' => 'get_post', 'uses' => 'PostController@getPostAction']
);

$app->get(
  '/post/{postId}/comments',
  ['as' => 'get_post_comments', 'uses' => 'CommentsController@getPostCommentsAction']
);

//...

All of this set up allows you to easily use the JsonSerializer service as follows:, (*18)

<?php

namespace App\Http\Controllers;

use Acme\Domain\Dummy\PostRepository;
use NilPortugues\Laravel5\Json\JsonSerializer;
use NilPortugues\Laravel5\Json\JsonResponseTrait;

class PostController extends \Laravel\Lumen\Routing\Controller
{
    use JsonResponseTrait;

    /**
     * @var PostRepository
     */
    protected $postRepository;

    /**
     * @var JsonSerializer
     */
    protected $serializer;

    /**
     * @param PostRepository $postRepository
     * @param JsonSerializer $jsonSerializer
     */
    public function __construct(PostRepository $postRepository, JsonSerializer $jsonSerializer)
    {
        $this->postRepository = $postRepository;
        $this->serializer = $jsonSerializer;
    }

    /**
     * @param int $postId
     *
     * @return \Symfony\Component\HttpFoundation\Response
     */
    public function getPostAction($postId)
    {
        $post = $this->postRepository->findById($postId);

        /** @var \NilPortugues\Api\Json\JsonTransformer $transformer */
        $transformer = $this->serializer->getTransformer();
        $transformer->setSelfUrl(route('get_post', ['postId' => $postId]));
        $transformer->setNextUrl(route('get_post', ['postId' => $postId+1]));

        return $this->response($this->serializer->serialize($post));
    }
}

Output:, (*19)

HTTP/1.1 200 OK
Cache-Control: protected, max-age=0, must-revalidate
Content-type: application/json; charset=utf-8
{
    "post_id": 9,
    "headline": "Hello World",
    "body": "Your first post",
    "author": {
        "user_id": 1,
        "name": "Post Author"
    },
    "comments": [
        {
            "comment_id": 1000,
            "dates": {
                "created_at": "2015-07-18T12:13:00+00:00",
                "accepted_at": "2015-07-19T00:00:00+00:00"
            },
            "comment": "Have no fear, sers, your king is safe.",
            "user": {
                "user_id": 2,
                "name": "Barristan Selmy"
            }
        }
    ],
    "links": {
        "self": {
            "href": "http://localhost:8000/post/9"
        },
        "next": {
            "href": "http://localhost:8000/post/10"
        },
        "comments": {
            "href": "http://localhost:8000/post/9/comments"
        }
    }
}

Response objects (JsonResponseTrait)

The following JsonResponseTrait methods are provided to return the right headers and HTTP status codes are available:, (*20)

    protected function errorResponse($json);
    protected function resourceCreatedResponse($json);
    protected function resourceDeletedResponse($json);
    protected function resourceNotFoundResponse($json);
    protected function resourcePatchErrorResponse($json);
    protected function resourcePostErrorResponse($json);
    protected function resourceProcessingResponse($json);
    protected function resourceUpdatedResponse($json);
    protected function response($json);
    protected function unsupportedActionResponse($json);


, (*21)

Quality

To run the PHPUnit tests at the command line, go to the tests directory and issue phpunit., (*22)

This library attempts to comply with PSR-1, PSR-2, PSR-4 and PSR-7., (*23)

If you notice compliance oversights, please send a patch via Pull Request., (*24)


, (*25)

Contribute

Contributions to the package are always welcome!, (*26)


, (*27)

Support

Get in touch with me using one of the following means:, (*28)


, (*29)

Authors

License

The code base is licensed under the MIT license., (*30)

The Versions

06/03 2016

dev-master

9999999-dev http://nilportugues.com

Laravel 5 Json API Transformer Package

  Sources   Download

MIT

The Requires

 

The Development Requires

laravel api json lumen serializer psr7 response laravel5 transformer

05/01 2016

1.3.0

1.3.0.0 http://nilportugues.com

Laravel 5 Json API Transformer Package

  Sources   Download

MIT

The Requires

 

The Development Requires

laravel api json lumen serializer psr7 response laravel5 transformer

22/11 2015

1.2.8

1.2.8.0 http://nilportugues.com

Laravel 5 Json API Transformer Package

  Sources   Download

MIT

The Requires

 

laravel api json lumen serializer psr7 response laravel5 transformer

14/11 2015

1.2.7

1.2.7.0 http://nilportugues.com

Laravel 5 Json API Transformer Package

  Sources   Download

MIT

The Requires

 

laravel api json lumen serializer psr7 response laravel5 transformer

21/10 2015

1.2.6

1.2.6.0 http://nilportugues.com

Laravel 5 Json API Transformer Package

  Sources   Download

MIT

The Requires

 

laravel api json lumen serializer psr7 response laravel5 transformer

20/10 2015

1.2.5

1.2.5.0 http://nilportugues.com

Laravel 5 Json API Transformer Package

  Sources   Download

MIT

The Requires

 

laravel api json lumen serializer psr7 response laravel5 transformer

20/10 2015

1.2.4

1.2.4.0 http://nilportugues.com

Laravel 5 Json API Transformer Package

  Sources   Download

MIT

The Requires

 

laravel api json lumen serializer psr7 response laravel5 transformer

17/10 2015

1.2.3

1.2.3.0 http://nilportugues.com

Laravel 5 Json API Transformer Package

  Sources   Download

MIT

The Requires

 

laravel api json lumen serializer psr7 response laravel5 transformer

16/10 2015

1.2.2

1.2.2.0 http://nilportugues.com

Laravel 5 Json API Transformer Package

  Sources   Download

MIT

The Requires

 

laravel api json lumen serializer psr7 response laravel5 transformer

09/09 2015

1.2.1

1.2.1.0 http://nilportugues.com

Laravel 5 Json API Transformer Package

  Sources   Download

MIT

The Requires

 

laravel api json lumen serializer psr7 response laravel5 transformer

07/09 2015

1.2.0

1.2.0.0 http://nilportugues.com

Laravel 5 Json API Transformer Package

  Sources   Download

MIT

The Requires

 

laravel api json lumen serializer psr7 response laravel5 transformer

28/08 2015

1.1.3

1.1.3.0 http://nilportugues.com

Laravel 5 Json API Transformer Package

  Sources   Download

MIT

The Requires

 

laravel api json lumen serializer psr7 response laravel5 transformer

24/08 2015

1.1.2

1.1.2.0 http://nilportugues.com

Laravel 5 Json API Transformer Package

  Sources   Download

MIT

The Requires

 

laravel api json lumen serializer psr7 response laravel5 transformer

19/08 2015

1.1.1

1.1.1.0 http://nilportugues.com

Laravel 5 Json API Transformer Package

  Sources   Download

MIT

The Requires

 

laravel api json lumen serializer psr7 response laravel5 transformer

19/08 2015

1.1.0

1.1.0.0 http://nilportugues.com

Laravel 5 Json API Transformer Package

  Sources   Download

MIT

The Requires

 

laravel api json lumen serializer psr7 response laravel5 transformer

18/08 2015

1.0.0

1.0.0.0 http://nilportugues.com

Laravel 5 Json API Transformer Package

  Sources   Download

MIT

The Requires

 

laravel api json lumen serializer psr7 response laravel5 transformer