laravel5-fractal
A simple fractal service provider and transformer generator for laravel 5 and lumen
- Installation
- Config
- Command
- Usage
- Trait (Optional feature >= 2.1.3)
- Sub Relationship Modifier (Optional feature >=2.4.0)
- Extra Extra
Installation
Laravel
Require this package with composer using the following command:
composer require cyvelnet/laravel5-fractal
After updating composer, add the ServiceProvider to the providers array in config/app.php
Cyvelnet\Laravel5Fractal\Laravel5FractalServiceProvider::class,
and register Facade
And optionally add a new line to the aliases
array:
'Fractal' => Cyvelnet\Laravel5Fractal\Facades\Fractal::class
Lumen
register service provider in /bootstrap/app.php for lumen
$app->register(Cyvelnet\Laravel5Fractal\Laravel5FractalServiceProvider::class);
and uncomment the line
$app->withFacades();
and finally register Facade with
class_alias(Cyvelnet\Laravel5Fractal\Facades\Fractal::class, 'Fractal');
Config
You can also publish the config file to change implementations to suits you.
php artisan vendor:publish --provider="Cyvelnet\Laravel5Fractal\Laravel5FractalServiceProvider"
Automatic sub resources injection.
Auto inject/embed sub resources are disabled by default, to enable this feature, edit config/fractal.php
and set
autoload => true
Command
cyvelnet/fractal
come with a helpful commandline to assist your api transformation, just type and your Eloquent model attributes will be added to your transform array automatically
// generate a empty transformer
php artisan make:transformer UserTransformer
// generate a modeled transformer
php artisan make:transformer UserTransformer -m User
Usage
Fractal::item();
Transform a single record
$user = User::find(1);
Fractal::item($user, new UserTransformer());
Fractal::collection();
Transform a collection of records
$users = User::where('activated', true)->get();
// $resourceKey is optional for most serializer, but recommended to set for JsonApiSerializer
$resourceKey = 'user';
Fractal::collection($users, new UserTransformer(), $resourceKey);
Fractal::includes()
Inject sub resources
Fractal::includes('orders') // where 'orders' is defined in your transformer class's $availableIncludes array
Fractal::excludes()
Remove sub resources
Fractal::excludes('orders')
Fractal::setSerializer()
Change transformer serializer
Fractal::setSerializer(\Acme\MySerializer); // where MySerializer is a class extends \League\Fractal\Serializer\SerializerAbstract
Fractal::fieldsets()
add sparse fieldset
Fractal::fieldsets(['orders' => 'item,qty,total,date_order'])
Fractal::addMeta()
add extra meta data to root
// specify with single meta data
Fractal::addMeta($key = 'metaKey', $data = 'metaData')
// add an array of meta data
Fractal::addMeta([
'key1' => 'data1',
'key2' => 'data2'
])
Trait
https://github.com/Cyvelnet/laravel5-fractal/wiki/Transformable-Trait
Sub Relationship Modifier
https://github.com/Cyvelnet/laravel5-fractal/wiki/Sub-Relationship-Modifier
Extra
https://github.com/Cyvelnet/laravel5-fractal/wiki/Custom-TransformerableAbstract-class