该包为 Fractal 提供了一个漂亮且简单的包装器,以便在 Laravel 应用程序中使用。如果您不知道 Fractal 是做什么的,请看一下他们的介绍。简而言之,Fractal 对于在 API 中使用数据之前转换数据非常有用。
使用分形数据可以像这样进行转换:
使用 LeagueFractalManager;使用 LeagueFractalResourceCollection;$books = [ ['id' => 1, 'title' => 'Hogfather', 'characters' => [...]], ['id' => 2、'title' => '杀死所有人的游戏'、'characters' => [...]] ];$manager = new Manager();$resource = new Collection($books, new BookTransformer());$manager->parseInincludes('characters');$manager->createData($resource)->toArray() ;
这个包使这个过程变得更容易:
分形() ->收藏($书籍) ->transformWith(new BookTransformer()) ->包含字符() ->toArray();
外观爱好者会很高兴知道提供了外观:
分形::collection($books)->transformWith(new BookTransformer())->toArray();
还有一个非常简短的语法可用于快速转换数据:
分形($books, new BookTransformer())->toArray();
您也可以直接从 Laravel 集合进行转换:
收集($books)->transformWith(new BookTransformer());
从 Laravel 集合直接转换对于 Eloquent 结果特别有用:
用户::all()->transformWith(new UserTransformer())->toArray();
Spatie 是一家位于比利时安特卫普的网页设计机构。您可以在我们的网站上找到所有开源项目的概述。
我们投入了大量资源来创建一流的开源包。您可以通过购买我们的一款付费产品来支持我们。
我们非常感谢您从家乡寄给我们一张明信片,并注明您正在使用我们的哪种套餐。您可以在我们的联系页面上找到我们的地址。我们在虚拟明信片墙上发布所有收到的明信片。
您可以通过composer拉入包:
作曲家需要 spatie/laravel-fractal
该包将自动注册。
如果要更改默认序列化器、默认分页器或默认分形类SpatieFractalFractal
您必须发布配置文件:
php artisan 供应商:发布 --provider="SpatieFractalFractalServiceProvider"
如果您要升级到 Laravel 5.5,现有的配置文件应从laravel-fractal.php重命名为fractal.php
这是已发布文件的内容:
return [/* * 执行转换时使用的默认序列化器。 * 可以留空以使用 Fractal 的默认值。这可以是 * 字符串或 LeagueFractalSerializerSerializerAbstract 子类。 */'default_serializer' => '',/* 执行转换时使用的默认分页器。 * 可以留空以使用 Fractal 的默认值。这可以是 * 字符串或 LeagueFractalPaginatorPaginatorInterface 子类。 */'default_paginator' => '',/* * LeagueFractalSerializerJsonApiSerializer 将使用此值 * 作为生成链接的前缀。设置为“null”以禁用此功能。 */'base_url' => null,/* * 如果您希望覆盖或扩展默认的 SpatieFractalFractal * 实例,请提供您要使用的类的名称。 */'fractal_class' => SpatieFractalFractal::class,'auto_includes' => [/* * 如果启用 Fractal 将自动添加包含在 `include` 请求参数中的名称。 */'enabled' => true,/* * 请求中的键名,我们应该在其中查找要包含的内容。 */'request_key' => '包含', ],'auto_excludes' => [/* * 如果启用,Fractal 将自动添加排除“排除”请求参数中存在的*姓名。 */'enabled' => true,/* * 请求中的键名,我们应该在其中查找要排除的排除项。 */'request_key' => '排除', ],'auto_fieldsets' => [/* * 如果启用,Fractal 将自动添加名称出现在“fields”请求参数中的字段集。 */'enabled' => true,/* * 请求中键的名称,我们应该在其中查找要解析的字段集。 */'request_key' => '字段', ], ];
请参阅spatie/fractalistic
的文档来了解该包提供的所有方法。
在所有代码示例中,您可以使用fractal()
而不是Fractal::create()
。
要返回带有 json 数据的响应,您可以在 Laravel 应用程序中执行此操作。
$books = fractal($books, new BookTransformer())->toArray();返回响应()->json($books);
Fractal 类上的respond()
方法可以使这个过程更加简化。
返回分形($books, new BookTransformer())->respond();
您可以传递响应代码作为第一个参数,也可以传递一些标头作为第二个参数
return fractal($books, new BookTransformer())->respond(403, ['a-header' => '一个值','another-header' => '另一个值', ]);
您可以传递 json 编码选项作为第三个参数:
返回分形($books, new BookTransformer())->respond(200, [], JSON_PRETTY_PRINT);
您还可以使用回调设置状态代码和标头:
使用 IlluminateHttpJsonResponse;返回分形($books, new BookTransformer())->respond(function(JsonResponse $response) {$response->setStatusCode(403) -> header('a-header', 'a value') ->withHeaders(['another-header' => '另一个值','yet-another-header' => '又一个值', ]); });
您可以使用 Laravel 的 Macroable 特征向 Fractal 类添加方法。想象一下,您想要向请求的元数据添加一些统计信息,您可以这样做而不会使代码混乱:
使用 SpatieFractal 分形; Fractal::macro('stats', function ($stats) {// 根据需要转换传递的统计信息return $this->addMeta(['stats' => $stats]); });分形($books, new BookTransformer())->stats(['runtime' => 100])->respond();
您可以运行make:transformer
命令来快速生成虚拟变压器。默认情况下它将存储在appTransformers
目录中。
将配置文件从laravel-fractal
重命名为fractal
引入v3
是为了将league/fractal
替换为spatie/fractalistic
。对 Lumen 的支持已被放弃。您应该能够将 Laravel 应用程序从v2
升级到v3
而无需更改任何代码。
在大多数情况下,您只需升级到v2
,无需对代码进行任何更改或仅进行少量更改:
resourceName
已重命名为withResourceName
。
该软件包的v2
被标记的主要原因是 League 底层 Fractal 的 v0.14 包含重大更改。如果您在 v2 中使用LeagueFractalSerializerJsonApiSerializer
, links
键将包含self
、 first
、 next
和last
。
请参阅变更日志以了解最近更改的更多信息。
$ 作曲家测试
详细信息请参阅贡献。
如果您发现有关安全的错误,请发送邮件至 [email protected],而不是使用问题跟踪器。
弗里克·范德赫滕
所有贡献者
麻省理工学院许可证 (MIT)。请参阅许可证文件以获取更多信息。