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.
class TestModel extends Model
{
/**
* Example hasMany relationship
*/
public function hasManySomethings()
{
return $this->hasMany(SomeOtherModel::class);
}
}
public function up()
{
Schema::create('test_models', function (Blueprint $table) {
$table->increments('id_field');
$table->boolean('boolean_field');
$table->string('string_field');
});
}
<?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);
}
}
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.php
as shown below:
public function register()
{
if ($this->app->environment() == 'local') {
$this->app->register(lasselehtinen\Cybertron\CybertronServiceProvider::class);
}
}
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
The MIT License (MIT). Please see License File for more information.