2
2
3
3
namespace Huntie \JsonApi \Http \Controllers ;
4
4
5
- use Validator ;
6
5
use Huntie \JsonApi \Contracts \Model \IncludesRelatedResources ;
7
6
use Huntie \JsonApi \Exceptions \InvalidRelationPathException ;
8
7
use Huntie \JsonApi \Http \JsonApiResponse ;
19
18
use Illuminate \Foundation \Validation \ValidatesRequests ;
20
19
use Illuminate \Http \Response ;
21
20
use Illuminate \Routing \Controller ;
22
- use Illuminate \Validation \ValidationException ;
23
21
24
22
abstract class JsonApiController extends Controller
25
23
{
@@ -62,11 +60,10 @@ public function __construct()
62
60
public function indexAction ($ request , $ query = null )
63
61
{
64
62
$ records = $ query ?: $ this ->model ->newQuery ();
65
- $ params = $ this ->getRequestParameters ($ request );
66
- $ this ->validateIncludableRelations ($ params ['include ' ]);
63
+ $ this ->validateIncludableRelations ($ request ->inputSet ('include ' ));
67
64
68
- $ records = $ this ->sortQuery ($ records , $ params [ 'sort ' ] );
69
- $ records = $ this ->filterQuery ($ records , $ params [ 'filter ' ] );
65
+ $ records = $ this ->sortQuery ($ records , $ request -> inputSet ( 'sort ' ) );
66
+ $ records = $ this ->filterQuery ($ records , ( array ) $ request -> input ( 'filter ' ) );
70
67
71
68
try {
72
69
$ pageSize = min ($ this ->model ->getPerPage (), $ request ->input ('page.size ' ));
@@ -77,7 +74,7 @@ public function indexAction($request, $query = null)
77
74
return $ this ->error (Response::HTTP_BAD_REQUEST , 'Invalid query parameters ' );
78
75
}
79
76
80
- return new JsonApiResponse (new CollectionSerializer ($ records , $ params [ 'fields ' ] , $ params [ 'include ' ] ));
77
+ return new JsonApiResponse (new CollectionSerializer ($ records , $ request -> inputSet ( 'fields ' ) , $ request -> inputSet ( 'include ' ) ));
81
78
}
82
79
83
80
/**
@@ -109,10 +106,9 @@ public function storeAction($request)
109
106
public function showAction ($ request , $ record )
110
107
{
111
108
$ record = $ this ->findModelInstance ($ record );
112
- $ params = $ this ->getRequestParameters ($ request );
113
- $ this ->validateIncludableRelations ($ params ['include ' ]);
109
+ $ this ->validateIncludableRelations ($ request ->inputSet ('include ' ));
114
110
115
- return new JsonApiResponse (new ResourceSerializer ($ record , $ params [ 'fields ' ] , $ params [ 'include ' ] ));
111
+ return new JsonApiResponse (new ResourceSerializer ($ record , $ request -> inputSet ( 'fields ' ) , $ request -> inputSet ( 'include ' ) ));
116
112
}
117
113
118
114
/**
@@ -129,8 +125,8 @@ public function updateAction($request, $record)
129
125
$ record ->fill ((array ) $ request ->input ('data.attributes ' ));
130
126
$ record ->save ();
131
127
132
- if ($ relationships = $ request ->input ('data.relationships ' )) {
133
- $ this ->updateResourceRelationships ($ record , (array ) $ relationships );
128
+ if ($ request ->has ('data.relationships ' )) {
129
+ $ this ->updateResourceRelationships ($ record , (array ) $ request -> input ( ' data. relationships' ) );
134
130
}
135
131
136
132
return new JsonApiResponse (new ResourceSerializer ($ record ));
@@ -220,66 +216,16 @@ protected function findModelInstance($record)
220
216
return $ this ->model ->findOrFail ($ record );
221
217
}
222
218
223
- /**
224
- * Return any JSON API resource parameters from a request.
225
- *
226
- * @param Request $request
227
- *
228
- * @return array
229
- */
230
- protected function getRequestParameters ($ request )
231
- {
232
- return [
233
- 'fields ' => $ this ->getRequestQuerySet ($ request , 'fields ' , '/^([A-Za-z]+.?)+[A-Za-z]+$/ ' ),
234
- 'include ' => $ this ->getRequestQuerySet ($ request , 'include ' , '/^([A-Za-z]+.?)+[A-Za-z]+$/ ' ),
235
- 'sort ' => $ this ->getRequestQuerySet ($ request , 'sort ' , '/[A-Za-z_]+/ ' ),
236
- 'filter ' => (array ) $ request ->input ('filter ' ),
237
- ];
238
- }
239
-
240
- /**
241
- * Return any comma separated values in a request query field as an array.
242
- *
243
- * @param Request $request
244
- * @param string $key
245
- * @param string|null $validate Regular expression to test for each item
246
- *
247
- * @throws \Illuminate\Validation\ValidationException
248
- *
249
- * @return array
250
- */
251
- protected function getRequestQuerySet ($ request , $ key , $ validate = null )
252
- {
253
- $ values = preg_split ('/,/ ' , $ request ->input ($ key ), null , PREG_SPLIT_NO_EMPTY );
254
-
255
- $ validator = Validator::make (['param ' => $ values ], [
256
- 'param.* ' => 'required ' . ($ validate ? '|regex: ' . $ validate : '' ),
257
- ]);
258
-
259
- if ($ validator ->fails ()) {
260
- throw new ValidationException ($ validator , $ this ->error (
261
- Response::HTTP_BAD_REQUEST ,
262
- sprintf ('Invalid values for "%s" parameter ' , $ key ))
263
- );
264
- }
265
-
266
- return $ values ;
267
- }
268
-
269
219
/**
270
220
* Validate the requested included relationships against those that are
271
221
* allowed on the requested resource type.
272
222
*
273
- * @param array|null $relations
223
+ * @param array $relations
274
224
*
275
225
* @throws InvalidRelationPathException
276
226
*/
277
- protected function validateIncludableRelations ($ relations )
227
+ protected function validateIncludableRelations (array $ relations )
278
228
{
279
- if (is_null ($ relations )) {
280
- return ;
281
- }
282
-
283
229
foreach ($ relations as $ relation ) {
284
230
if (!$ this ->model instanceof IncludesRelatedResources || !in_array ($ relation , $ this ->model ->getIncludableRelations ())) {
285
231
throw new InvalidRelationPathException ($ relation );
0 commit comments