Skip to content

Commit ff95cfe

Browse files
committed
pref: remove fractal
1 parent f006993 commit ff95cfe

File tree

3 files changed

+55
-61
lines changed

3 files changed

+55
-61
lines changed

composer.json

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,11 @@
1010
],
1111
"require": {
1212
"php": "^8.0",
13-
"ext-json": "*",
14-
"spatie/laravel-fractal": "^6.0"
13+
"ext-json": "*"
1514
},
1615
"require-dev": {
1716
"orchestra/testbench": "^8.0",
1817
"jiannei/laravel-enum": "^3.0",
19-
"league/fractal": "^0.20.1",
2018
"phpunit/phpunit": "^10.0"
2119
},
2220
"autoload": {

src/Support/Format.php

Lines changed: 52 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,6 @@
2323
use Illuminate\Support\Arr;
2424
use Illuminate\Support\Facades\Config;
2525
use Illuminate\Support\Traits\Macroable;
26-
use League\Fractal\Pagination\Cursor;
27-
use League\Fractal\Pagination\IlluminatePaginatorAdapter;
28-
use League\Fractal\Serializer\ArraySerializer;
29-
use League\Fractal\Serializer\DataArraySerializer;
30-
use Spatie\Fractal\Fractal;
3126

3227
class Format
3328
{
@@ -82,52 +77,39 @@ public function data($data, ?string $message, int $code, $errors = null): array
8277
* Format paginator data.
8378
*
8479
* @param AbstractPaginator|AbstractCursorPaginator $resource
85-
* @param null $transformer
86-
* @param null $resourceName
8780
* @return array
8881
*/
89-
public function paginator(AbstractPaginator|AbstractCursorPaginator $resource, $transformer = null, $resourceName = null): array
82+
public function paginator(AbstractPaginator|AbstractCursorPaginator $resource): array
9083
{
91-
$fractal = fractal()
92-
->collection($resource, $transformer ?: fn ($item) => $item->toArray(), $resourceName)
93-
->serializeWith(DataArraySerializer::class);
94-
95-
return tap($fractal, $this->formatCollection($resource))->toArray();
84+
return [
85+
'data' => $resource->toArray()['data'],
86+
'meta' => $this->formatMeta($resource)
87+
];
9688
}
9789

9890
/**
9991
* Format collection resource data.
10092
*
10193
* @param ResourceCollection $collection
102-
* @param null $transformer
103-
* @param null $resourceName
10494
* @return array
10595
*/
106-
public function resourceCollection(ResourceCollection $collection, $transformer = null, $resourceName = null): array
96+
public function resourceCollection(ResourceCollection $collection): array
10797
{
108-
$fractal = fractal()
109-
->collection($collection->resource, $transformer ?: $this->formatJsonResource(), $resourceName)
110-
->serializeWith(DataArraySerializer::class);
111-
112-
return tap($fractal, $this->formatCollection($collection->resource))->toArray();
98+
return array_filter([
99+
'data' => $collection->toArray(request()),
100+
'meta' => $this->formatMeta($collection->resource)
101+
]);
113102
}
114103

115104
/**
116105
* Format JsonResource Data.
117106
*
118107
* @param JsonResource $resource
119-
* @param null $transformer
120-
* @param null $resourceName
121108
* @return array
122109
*/
123-
public function jsonResource(JsonResource $resource, $transformer = null, $resourceName = null): array
110+
public function jsonResource(JsonResource $resource): array
124111
{
125-
$data = value($this->formatJsonResource(), $resource);
126-
127-
return fractal()
128-
->item($data, $transformer ?: fn () => $data, $resourceName)
129-
->serializeWith(ArraySerializer::class)
130-
->toArray();
112+
return value($this->formatJsonResource(),$resource);
131113
}
132114

133115
/**
@@ -139,7 +121,7 @@ public function jsonResource(JsonResource $resource, $transformer = null, $resou
139121
*/
140122
protected function formatMessage(int $code, ?string $message): ?string
141123
{
142-
if (! $message && class_exists($enumClass = Config::get('response.enum'))) {
124+
if (!$message && class_exists($enumClass = Config::get('response.enum'))) {
143125
$message = $enumClass::fromValue($code)->description;
144126
}
145127

@@ -182,6 +164,8 @@ protected function formatStatusCode($code, string $from = 'success'): int
182164
*/
183165
protected function formatJsonResource(): \Closure
184166
{
167+
// vendor/laravel/framework/src/Illuminate/Http/Resources/Json/ResourceResponse.php
168+
// toResponse
185169
return function (JsonResource $resource) {
186170
return array_merge_recursive($resource->resolve(request()), $resource->with(request()), $resource->additional);
187171
};
@@ -191,32 +175,43 @@ protected function formatJsonResource(): \Closure
191175
* Format paginator data.
192176
*
193177
* @param $collection
194-
* @return \Closure
195178
*/
196-
protected function formatCollection($collection): \Closure
179+
protected function formatMeta($collection)
197180
{
198-
return function (Fractal $item) use ($collection) {
199-
return match (true) {
200-
$collection instanceof CursorPaginator => $item->withCursor(new Cursor(
201-
$collection->cursor()?->encode(),
202-
$collection->previousCursor()?->encode(),
203-
$collection->nextCursor()?->encode(),
204-
count($collection->items())
205-
)),
206-
$collection instanceof LengthAwarePaginator => $item->paginateWith(new IlluminatePaginatorAdapter($collection)),
207-
$collection instanceof Paginator => $item->addMeta([
208-
'pagination' => [
209-
'count' => $collection->lastItem(),
210-
'per_page' => $collection->perPage(),
211-
'current_page' => $collection->currentPage(),
212-
'links' => array_filter([
213-
'previous' => $collection->previousPageUrl(),
214-
'next' => $collection->nextPageUrl(),
215-
]),
216-
],
217-
]),
218-
default => $item,
219-
};
181+
return match (true) {
182+
$collection instanceof CursorPaginator => [
183+
'cursor' => [
184+
'current' => $collection->cursor()?->encode(),
185+
'prev' => $collection->previousCursor()?->encode(),
186+
'next' => $collection->nextCursor()?->encode(),
187+
'count' => count($collection->items()),
188+
]
189+
],
190+
$collection instanceof LengthAwarePaginator => [
191+
'pagination' => [
192+
'count' => $collection->lastItem(),
193+
'per_page' => $collection->perPage(),
194+
'current_page' => $collection->currentPage(),
195+
'total' => $collection->total(),
196+
'total_pages' => $collection->lastPage(),
197+
'links' => array_filter([
198+
'previous' => $collection->previousPageUrl(),
199+
'next' => $collection->nextPageUrl(),
200+
]),
201+
],
202+
],
203+
$collection instanceof Paginator => [
204+
'pagination' => [
205+
'count' => $collection->lastItem(),
206+
'per_page' => $collection->perPage(),
207+
'current_page' => $collection->currentPage(),
208+
'links' => array_filter([
209+
'previous' => $collection->previousPageUrl(),
210+
'next' => $collection->nextPageUrl(),
211+
]),
212+
],
213+
],
214+
default => [],
220215
};
221216
}
222217

@@ -231,7 +226,7 @@ protected function formatDataFields(array $data): array
231226
$formatConfig = \config('response.format.config', []);
232227

233228
foreach ($formatConfig as $key => $config) {
234-
if (! Arr::has($data, $key)) {
229+
if (!Arr::has($data, $key)) {
235230
continue;
236231
}
237232

@@ -244,7 +239,7 @@ protected function formatDataFields(array $data): array
244239
$key = $alias;
245240
}
246241

247-
if (! $show) {
242+
if (!$show) {
248243
$data = Arr::except($data, $key);
249244
}
250245
}

tests/SuccessTest.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,8 @@ public function testSuccessWithResourceData()
137137
public function testSuccessWithCollectionData()
138138
{
139139
// 方式七:返回 Api collection
140-
$users = User::factory()->count(10)->make();
140+
User::factory()->count(3)->create();
141+
$users = User::all();
141142
$response = Response::success(new UserCollection($users));
142143

143144
$this->assertEquals(200, $response->status());

0 commit comments

Comments
 (0)