somnambulist/fractal-bundle

将 samj/fractal-bundle 移植到 Symfony 中以集成 TheLeague Fractal

安装次数: 9,760

依赖者: 1

建议者: 0

安全: 0

星标: 2

关注者: 4

分支: 1

公开问题: 0

类型:symfony-bundle

2.1.0 2024-03-02 18:51 UTC

This package is auto-updated.

Last update: 2024-08-31 00:37:05 UTC


README

GitHub Actions Build Status Issues License PHP Version Current Version

samj/fractal-bundle 分支并重新编写,以提供与 Symfony 框架集成的 Fractal

要求

  • PHP 8.0+
  • symfony/framework-bundle 5.2+

安装

使用 composer 安装,或从 github.com 检出/拉取文件。

  • composer require somnambulist/fractal-bundle

使用

如果未通过 Symfony Flex 注册,请将 SomnambulistFractalBundle 添加到您的 bundles.php 列表。

作为服务使用转换器

此包允许自动连接/自动配置转换器作为服务。这允许您利用 Symfonys 容器来解决依赖关系并通过类名(或服务别名)引用转换器。

只要转换器扩展自 League\Fractal\TransformerAbstract 或带有 somnambulist.fractal_bundle.transformer 标签,它就会对 Fractal 管理器实例可用。

services:
    App\Http\Api\Transformers\:
        resource: '%kernel.project_dir%/Http/Api/Transformers/'

如果转换器不扩展 TransformerAbstract,请确保为它们标记

services:
    App\Http\Api\Transformers\:
        resource: '%kernel.project_dir%/Http/Api/Transformers/'
        tags: ['somnambulist.fractal_bundle.transformer']

注意:如果您的转换器未注册为服务或未传递为有效的可调用或 TransformerAbstract 实例,此库将引发异常。

例如:向 UserTransformer(来自 samj 的说明书的示例)添加身份验证检查

use League\Fractal\TransformerAbstract;

class UserTransformer extends TransformerAbstract
{
    public function __construct(private AuthorizationChecker $authorizationChecker)
    {
    }
    
    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;
    }
}

通过服务别名名称或类名引用转换器

$resource = new Collection($users, UserTransformer::class);

这同样适用于包含

public function includeFriends(User $user)
{    
    return $this->collection($user->friends(), UserTransformer::class);
}

查看 示例应用程序 以获取更多示例。

测试

使用 PHPUnit 9+ 进行测试。通过 vendor/bin/phpunit 运行测试。