samj/fractal-bundle

该包已被废弃,不再维护。没有建议的替代包。

League 的 Fractal 的 Symfony Bundle。实现将依赖注入到你的转换器中

4.0.0 2020-06-19 12:31 UTC

This package is auto-updated.

Last update: 2021-09-19 14:59:25 UTC


README

本包提供了 league/fractal 的集成,用于 Symfony。此外,它还允许您使用 转换器作为服务

入门

首先,您需要在 composer.json 中添加依赖项

composer require samj/fractal-bundle

然后在 app/AppKernel.php 中注册 Bundle

public function registerBundles()
{
    return [
        // ...
        new SamJ\FractalBundle\SamJFractalBundle(),
    ];
}

现在我们可以编写和使用 fractal 转换器

将转换器用作服务

在某些情况下,您需要将一些依赖项传递到转换器中。一个常见的情况是在转换器中进行基于角色/范围的查询结果。例如,您需要只为管理员或用户资料的拥有者显示 email 字段

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;
    }
}

然后,您只需将此类注册为服务,并将服务 ID 作为转换器传递。然后,此 Bundle 将尝试从容器中获取它

$resource = new Collection($users, 'app.transformer.user');

这也可以在包含中工作

public function includeFriends(User $user)
{    
    return $this->collection($user->friends(), 'app.transformer.user');
}

您可以在 示例应用程序 中看到如何使用转换器的示例,该应用程序用于测试套件。