lasselehtinen / cybertron by lasleh

Fractal Transformer generator for Laravel
1,762
9
4
Package Data
Maintainer Username: lasleh
Maintainer Contact: lasse.lehtinen@iki.fi (Lasse Lehtinen)
Package Create Date: 2017-01-25
Package Last Update: 2017-01-25
Language: PHP
License: MIT
Last Refreshed: 2024-05-10 15:12:15
Package Statistics
Total Downloads: 1,762
Monthly Downloads: 0
Daily Downloads: 0
Total Stars: 9
Total Watchers: 4
Total Forks: 2
Total Open Issues: 0

Fractal Transformer generator for Laravel

Latest Version on Packagist Software License Build Status Quality Score StyleCI Total Downloads

The package provides an easy way to generate Fractal Transformers for your Laravel applications. The package automatically scans the models Eloquent relationships and attributes and generates the Transformer boiler plate. It also automatically adds casting for integer and boolean fields.

Example

Model

class TestModel extends Model
{
    /**
     * Example hasMany relationship
     */
    public function hasManySomethings()
    {
        return $this->hasMany(SomeOtherModel::class);
    }
}

Migration

    public function up()
    {
        Schema::create('test_models', function (Blueprint $table) {
            $table->increments('id_field');
            $table->boolean('boolean_field');
            $table->string('string_field');
        });
    }

Result

<?php

namespace App;

use League\Fractal;
use \lasselehtinen\Cybertron\Tests\TestModel;

class TestTransformer extends Fractal\TransformerAbstract
{
    /**
     * List of resources to automatically include
     *
     * @var  array
     */
    protected $defaultIncludes = [
        'hasManySomethings',
    ];

    /**
     * Transform TestModel
     *
     * @param   TestModel $testModel
     * @return  array
     */
    public function transform(TestModel $testModel)
    {
        return [
            'id_field' => (integer) $testModel->id_field,
            'boolean_field' => (boolean) $testModel->boolean_field,
            'string_field' => $testModel->string_field,
        ];
    }

    /**
     * Include HasManySomethings
     *
     * @param  TestModel $testModel
     * @return \League\Fractal\Resource\Collection
     */
    public function includeHasManySomethings(TestModel $testModel)
    {
        return $this->collection($testModel->hasManySomethings, new SomeOtherModelTransformer);
    }

}

Installation

You can pull in the package via composer:

$ composer require lasselehtinen/cybertron --dev

Since you only need the generator for development, don't add the generator the providers array in config/app.php. Instead add it to app/Providers/AppServiceProvider.phpas shown below:

public function register()
{
    if ($this->app->environment() == 'local') {
        $this->app->register(lasselehtinen\Cybertron\CybertronServiceProvider::class);
    }
}

Usage

Run the artisan command make:transformer and give the Transformers name and the model with the full namespace like so:

php artisan make:transformer PostTransformer --model=\\App\\Post

Similar way as in Laravels built-in generators, you can provide a namespace for the generated Transformer.

php artisan make:transformer \\App\\Api\\V1\\Transformers\\PostTransformer --model=\\App\\Post

License

The MIT License (MIT). Please see License File for more information.