diff --git a/src/Responder.php b/src/Responder.php index 8bd3d9b..da40b0f 100644 --- a/src/Responder.php +++ b/src/Responder.php @@ -5,7 +5,7 @@ use Illuminate\Support\Collection; use Illuminate\Database\Eloquent\Model; use Illuminate\Contracts\Support\Responsable; -use Signifly\Responder\Support\ModelResolver; +use Signifly\Responder\Contracts\ModelResolver; use Signifly\Responder\Responses\ModelResponse; use Signifly\Responder\Responses\DefaultResponse; use Signifly\Responder\Contracts\ResourceResolver; @@ -16,10 +16,10 @@ class Responder implements Contract { - /** @var \Signifly\Responder\Support\ModelResolver */ + /** @var \Signifly\Responder\Contracts\ModelResolver */ protected $modelResolver; - /** @var \Signifly\Responder\Support\ResourceResolver */ + /** @var \Signifly\Responder\Contracts\ResourceResolver */ protected $resourceResolver; public function __construct( @@ -62,7 +62,7 @@ public function respond($data): Responsable */ protected function respondForCollection(Collection $data) { - $modelClass = $model ?? $this->modelResolver->resolve($data, 'collection'); + $modelClass = $this->modelResolver->resolve($data, 'collection'); $resourceClass = $this->resourceResolver->resolve($modelClass); return new CollectionResponse($data, $resourceClass); @@ -90,7 +90,7 @@ protected function respondForModel(Model $model) */ protected function respondForPaginator(LengthAwarePaginator $data) { - $modelClass = $model ?? $this->modelResolver->resolve($data, 'paginator'); + $modelClass = $this->modelResolver->resolve($data, 'paginator'); $resourceClass = $this->resourceResolver->resolve($modelClass); return new PaginatorResponse($data, $resourceClass); diff --git a/src/Responses/Response.php b/src/Responses/Response.php index db6d8be..b0c4abe 100644 --- a/src/Responses/Response.php +++ b/src/Responses/Response.php @@ -6,20 +6,4 @@ abstract class Response implements Responsable { - /** - * Get the http resource class for a given model. - * - * @param string $model - * @return string - */ - protected function getResourceClassFor(string $model) - { - $resourceClass = ResourceResolver::forModel($model); - - if (config('responder.force_resources') && ! class_exists($resourceClass)) { - throw new Exception(sprintf('Could not find a resource for %s', $model)); - } - - return $resourceClass; - } } diff --git a/src/Support/ModelResolver.php b/src/Support/ModelResolver.php index 169a58c..41432e8 100644 --- a/src/Support/ModelResolver.php +++ b/src/Support/ModelResolver.php @@ -6,11 +6,20 @@ use Illuminate\Support\Arr; use Illuminate\Support\Str; use InvalidArgumentException; +use Illuminate\Support\Collection; use Illuminate\Database\Eloquent\Model; +use Illuminate\Contracts\Pagination\LengthAwarePaginator; use Signifly\Responder\Contracts\ModelResolver as Contract; class ModelResolver implements Contract { + /** + * Resolve the model from data for a given type. + * + * @param mixed $data + * @param string $type + * @return string|null + */ public function resolve($data, string $type): ?string { $methodName = 'resolveFor'.Str::studly($type); @@ -23,6 +32,12 @@ public function resolve($data, string $type): ?string ); } + /** + * Guard against invalid item. + * + * @param mixed $item + * @return void + */ protected function guardAgainstInvalidItem($item): void { if (! $item instanceof Model) { @@ -30,7 +45,13 @@ protected function guardAgainstInvalidItem($item): void } } - protected function resolveForArray($data): ?string + /** + * Resolve for an array. + * + * @param array $data + * @return string|null + */ + protected function resolveForArray(array $data): ?string { if (empty($data)) { return null; @@ -41,7 +62,13 @@ protected function resolveForArray($data): ?string return $this->resolveItem($item); } - protected function resolveForCollection($data): ?string + /** + * Resolve for a collection. + * + * @param \Illuminate\Support\Collection $data + * @return string|null + */ + protected function resolveForCollection(Collection $data): ?string { if ($data->isEmpty()) { return null; @@ -55,10 +82,10 @@ protected function resolveForCollection($data): ?string /** * Resolve for paginator. * - * @param [type] $data - * @return string + * @param \Illuminate\Contracts\Pagination\LengthAwarePaginator $data + * @return string|null */ - protected function resolveForPaginator($data): ?string + protected function resolveForPaginator(LengthAwarePaginator $data): ?string { if ($data->isEmpty()) { return null; diff --git a/src/Support/ResourceResolver.php b/src/Support/ResourceResolver.php index d10df89..403bb5b 100644 --- a/src/Support/ResourceResolver.php +++ b/src/Support/ResourceResolver.php @@ -2,10 +2,17 @@ namespace Signifly\Responder\Support; +use Signifly\Responder\Exceptions\ResourceNotFoundException; use Signifly\Responder\Contracts\ResourceResolver as Contract; class ResourceResolver implements Contract { + /** + * Resolve a resource from a model class. + * + * @param string $model + * @return string|null + */ public function resolve(string $model): ?string { if (empty($model)) {