Subversion-Projekte lars-tiefland.laravel_shop

Revision

Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
148 lars 1
<?php
2
 
3
namespace Illuminate\Http\Resources\Json;
4
 
5
use Countable;
6
use Illuminate\Http\Resources\CollectsResources;
7
use Illuminate\Pagination\AbstractCursorPaginator;
8
use Illuminate\Pagination\AbstractPaginator;
9
use IteratorAggregate;
10
 
11
class ResourceCollection extends JsonResource implements Countable, IteratorAggregate
12
{
13
    use CollectsResources;
14
 
15
    /**
16
     * The resource that this resource collects.
17
     *
18
     * @var string
19
     */
20
    public $collects;
21
 
22
    /**
23
     * The mapped collection instance.
24
     *
25
     * @var \Illuminate\Support\Collection
26
     */
27
    public $collection;
28
 
29
    /**
30
     * Indicates if all existing request query parameters should be added to pagination links.
31
     *
32
     * @var bool
33
     */
34
    protected $preserveAllQueryParameters = false;
35
 
36
    /**
37
     * The query parameters that should be added to the pagination links.
38
     *
39
     * @var array|null
40
     */
41
    protected $queryParameters;
42
 
43
    /**
44
     * Create a new resource instance.
45
     *
46
     * @param  mixed  $resource
47
     * @return void
48
     */
49
    public function __construct($resource)
50
    {
51
        parent::__construct($resource);
52
 
53
        $this->resource = $this->collectResource($resource);
54
    }
55
 
56
    /**
57
     * Indicate that all current query parameters should be appended to pagination links.
58
     *
59
     * @return $this
60
     */
61
    public function preserveQuery()
62
    {
63
        $this->preserveAllQueryParameters = true;
64
 
65
        return $this;
66
    }
67
 
68
    /**
69
     * Specify the query string parameters that should be present on pagination links.
70
     *
71
     * @param  array  $query
72
     * @return $this
73
     */
74
    public function withQuery(array $query)
75
    {
76
        $this->preserveAllQueryParameters = false;
77
 
78
        $this->queryParameters = $query;
79
 
80
        return $this;
81
    }
82
 
83
    /**
84
     * Return the count of items in the resource collection.
85
     *
86
     * @return int
87
     */
88
    public function count(): int
89
    {
90
        return $this->collection->count();
91
    }
92
 
93
    /**
94
     * Transform the resource into a JSON array.
95
     *
96
     * @param  \Illuminate\Http\Request  $request
97
     * @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable
98
     */
99
    public function toArray($request)
100
    {
101
        return $this->collection->map->toArray($request)->all();
102
    }
103
 
104
    /**
105
     * Create an HTTP response that represents the object.
106
     *
107
     * @param  \Illuminate\Http\Request  $request
108
     * @return \Illuminate\Http\JsonResponse
109
     */
110
    public function toResponse($request)
111
    {
112
        if ($this->resource instanceof AbstractPaginator || $this->resource instanceof AbstractCursorPaginator) {
113
            return $this->preparePaginatedResponse($request);
114
        }
115
 
116
        return parent::toResponse($request);
117
    }
118
 
119
    /**
120
     * Create a paginate-aware HTTP response.
121
     *
122
     * @param  \Illuminate\Http\Request  $request
123
     * @return \Illuminate\Http\JsonResponse
124
     */
125
    protected function preparePaginatedResponse($request)
126
    {
127
        if ($this->preserveAllQueryParameters) {
128
            $this->resource->appends($request->query());
129
        } elseif (! is_null($this->queryParameters)) {
130
            $this->resource->appends($this->queryParameters);
131
        }
132
 
133
        return (new PaginatedResourceResponse($this))->toResponse($request);
134
    }
135
}