paymaxi / fractal-bundle
A Symfony2 Bundle for Fractal by League. Implements dependency injection into your transformers
Requires
- php: >=7.1
- league/fractal: ^0.16
- paymaxi/compiler: ^0.1
- symfony/framework-bundle: ^2.7|^3.0|^4.0
Requires (Dev)
- phpunit/phpunit: ^5.6
This package is not auto-updated.
Last update: 2023-03-09 11:01:45 UTC
README
This bundle provides integration of league/fractal for Symfony. In addition it allows you to use transformers as a services.
Getting Started
First of all you need to add dependency to composer.json:
composer require paymaxi/fractal-bundle
Then register bundle in app/AppKernel.php
:
public function registerBundles() { return [ // ... new Paymaxi\FractalBundle\PaymaxiFractalBundle(), ]; }
Now we can write and use fractal transformers:
Using Transformers as Services
There are several cases when you need to pass some dependencies into transformer. The common one is role/scope based results in transformers. For example you need to show email
field only for administrators or owner of user profile:
class UserTransformer extends TransformerAbstract { private $authorizationCheker; public function __construct(AuthorizationChecker $authorizationCheker) { $this->authorizationCheker = $authorizationCheker; } public function transform(User $user) { $data = [ 'id' => $user->id(), 'name' => $user->name(), ]; if ($this->authorizationChecker->isGranted(UserVoter::SEE_EMAIL, $user)) { $data['email'] = $user->email(); } return $data; } }
Then you could just register this class as service, and pass service ID as transformer. This bundle then will try to get it from container:
$resource = new Collection($users, 'app.transformer.user');
This works in includes as well:
public function includeFriends(User $user) { return $this->collection($user->friends(), 'app.transformer.user'); }
You could see example of how to use transformers in sample application which is used in test suites.
License
The MIT License (MIT). Please see License File for more information.