@@ -46,21 +46,22 @@ private function extractCollection(
4646 Traversable $ collection ,
4747 AbstractCollectionMetadata $ metadata ,
4848 ResourceGenerator $ resourceGenerator ,
49- ServerRequestInterface $ request
49+ ServerRequestInterface $ request ,
50+ int $ depth = 0
5051 ) : HalResource {
5152 if (! $ metadata instanceof AbstractCollectionMetadata) {
5253 throw Exception \UnexpectedMetadataTypeException::forCollection ($ metadata , get_class ($ this ));
5354 }
5455
5556 if ($ collection instanceof Paginator) {
56- return $ this ->extractPaginator ($ collection , $ metadata , $ resourceGenerator , $ request );
57+ return $ this ->extractPaginator ($ collection , $ metadata , $ resourceGenerator , $ request, $ depth );
5758 }
5859
5960 if ($ collection instanceof DoctrinePaginator) {
60- return $ this ->extractDoctrinePaginator ($ collection , $ metadata , $ resourceGenerator , $ request );
61+ return $ this ->extractDoctrinePaginator ($ collection , $ metadata , $ resourceGenerator , $ request, $ depth );
6162 }
6263
63- return $ this ->extractIterator ($ collection , $ metadata , $ resourceGenerator , $ request );
64+ return $ this ->extractIterator ($ collection , $ metadata , $ resourceGenerator , $ request, $ depth );
6465 }
6566
6667 /**
@@ -77,7 +78,8 @@ private function extractPaginator(
7778 Paginator $ collection ,
7879 AbstractCollectionMetadata $ metadata ,
7980 ResourceGenerator $ resourceGenerator ,
80- ServerRequestInterface $ request
81+ ServerRequestInterface $ request ,
82+ int $ depth = 0
8183 ) : HalResource {
8284 $ data = ['_total_items ' => $ collection ->getTotalItemCount ()];
8385 $ pageCount = $ collection ->count ();
@@ -91,7 +93,8 @@ function (int $page) use ($collection) {
9193 $ collection ,
9294 $ metadata ,
9395 $ resourceGenerator ,
94- $ request
96+ $ request ,
97+ $ depth
9598 );
9699 }
97100
@@ -106,7 +109,8 @@ private function extractDoctrinePaginator(
106109 DoctrinePaginator $ collection ,
107110 AbstractCollectionMetadata $ metadata ,
108111 ResourceGenerator $ resourceGenerator ,
109- ServerRequestInterface $ request
112+ ServerRequestInterface $ request ,
113+ int $ depth = 0
110114 ) : HalResource {
111115 $ query = $ collection ->getQuery ();
112116 $ totalItems = count ($ collection );
@@ -124,22 +128,24 @@ function (int $page) use ($query, $perPage) {
124128 $ collection ,
125129 $ metadata ,
126130 $ resourceGenerator ,
127- $ request
131+ $ request ,
132+ $ depth
128133 );
129134 }
130135
131136 private function extractIterator (
132137 Traversable $ collection ,
133138 AbstractCollectionMetadata $ metadata ,
134139 ResourceGenerator $ resourceGenerator ,
135- ServerRequestInterface $ request
140+ ServerRequestInterface $ request ,
141+ int $ depth = 0
136142 ) : HalResource {
137143 $ isCountable = $ collection instanceof Countable;
138144 $ count = $ isCountable ? $ collection ->count () : 0 ;
139145
140146 $ resources = [];
141147 foreach ($ collection as $ item ) {
142- $ resources [] = $ resourceGenerator ->fromObject ($ item , $ request );
148+ $ resources [] = $ resourceGenerator ->fromObject ($ item , $ request, $ depth + 1 );
143149 $ count = $ isCountable ? $ count : $ count + 1 ;
144150 }
145151
@@ -184,7 +190,8 @@ private function createPaginatedCollectionResource(
184190 iterable $ collection ,
185191 AbstractCollectionMetadata $ metadata ,
186192 ResourceGenerator $ resourceGenerator ,
187- ServerRequestInterface $ request
193+ ServerRequestInterface $ request ,
194+ int $ depth = 0
188195 ) : HalResource {
189196 $ links = [];
190197 $ paginationParamType = $ metadata ->getPaginationParamType ();
@@ -197,7 +204,8 @@ private function createPaginatedCollectionResource(
197204 $ collection ,
198205 $ metadata ,
199206 $ resourceGenerator ,
200- $ request
207+ $ request ,
208+ $ depth
201209 );
202210 }
203211
@@ -236,7 +244,8 @@ private function createPaginatedCollectionResource(
236244 $ collection ,
237245 $ metadata ,
238246 $ resourceGenerator ,
239- $ request
247+ $ request ,
248+ $ depth
240249 );
241250 }
242251
@@ -255,11 +264,12 @@ private function createCollectionResource(
255264 iterable $ collection ,
256265 AbstractCollectionMetadata $ metadata ,
257266 ResourceGenerator $ resourceGenerator ,
258- ServerRequestInterface $ request
267+ ServerRequestInterface $ request ,
268+ int $ depth = 0
259269 ) : HalResource {
260270 $ resources = [];
261271 foreach ($ collection as $ item ) {
262- $ resources [] = $ resourceGenerator ->fromObject ($ item , $ request );
272+ $ resources [] = $ resourceGenerator ->fromObject ($ item , $ request, $ depth + 1 );
263273 }
264274
265275 return new HalResource ($ data , $ links , [
0 commit comments