somnambulist / fractal-bundle
将 samj/fractal-bundle 移植到 Symfony 中以集成 TheLeague Fractal
2.1.0
2024-03-02 18:51 UTC
Requires
- php: >=8.1
- league/fractal: ^0.20
- symfony/framework-bundle: ^6.4|^7.0
Requires (Dev)
- phpunit/phpunit: ^10.5
- symfony/phpunit-bridge: ^6.4
- symfony/stopwatch: ^6.4
- symfony/var-dumper: ^6.4
- symfony/yaml: ^6.4
README
从 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
运行测试。