lumenated / fractal-views
A view abstraction for fractal
Requires
- league/fractal: ^0.15.0
Requires (Dev)
- phpunit/phpunit: ^6.0
- satooshi/php-coveralls: ^1.0
This package is not auto-updated.
Last update: 2024-12-13 21:16:43 UTC
README
A view abstraction for Fractal making it more simple to integrate inside a framework.
Installation
composer require lumenated/fractal-views
Configuration
In order to use Fractal views for a resource we need to implement a transformer to map the resource to a serializable array and a view to present our resource to the consumer.
A View extends the Lumenated\FractalViews\Views
class which exposes two methods:
- renderOne which renders a single resource to an array
- renderMany which renders multiple objects to an array with pagination support
class BookView extends Lumenated\FractalViews\View { // The fractal transformer that has to be used for this view protected $transformerClass = BookTransformer::class; }
Next up we need to implement the BookTransformer
. Below is an example from the fractal documentation:
<?php namespace Acme\Transformer; use Acme\Model\Book; use League\Fractal; class BookTransformer extends Fractal\TransformerAbstract { public function transform(Book $book) { return [ 'id' => (int) $book->id, 'title' => $book->title, 'year' => (int) $book->yr, 'links' => [ [ 'rel' => 'self', 'uri' => '/books/'.$book->id, ] ], ]; } }
Usage
After configuring our view they can be used inside our project. Below is an example how to use them in a Lumen controller:
namespace \App\Http\Controllers; class BookController extends Controller { private $view; public function __construct(BookView $view) { $this->view = $view; } public function get($id) { $book = Book::findOrFail($id); return response()->json($this->view->render($book)); } public function getAll() { $books = Book::all(); return response()->json($this->view->render($books)); } }
Running tests
after installing the dependencies with:
composer install
Execute the following command to execute the tests:
vendor/bin/phpunit