Skip to content

A Symfony2 Bundle for Fractal by League. Implements dependency injection into your transformers

Notifications You must be signed in to change notification settings

paycoreio/FractalBundle

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

36 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

League Fractal Symfony Bundle

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

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.

About

A Symfony2 Bundle for Fractal by League. Implements dependency injection into your transformers

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages

  • PHP 100.0%