Skip to content

Commit fa2fdad

Browse files
committed
Handle when route is array
1 parent bb239d4 commit fa2fdad

File tree

1 file changed

+23
-7
lines changed

1 file changed

+23
-7
lines changed

src/RequestParser.php

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
use Illuminate\Database\Eloquent\Builder;
77
use Illuminate\Database\Eloquent\Model;
88
use Illuminate\Http\Request;
9+
use Illuminate\Routing\Controller;
910
use Illuminate\Routing\Route;
1011
use Illuminate\Support\Facades\Config;
1112
use LIQRGV\QueryFilter\Exception\ModelNotFoundException;
@@ -58,21 +59,22 @@ public function getBuilder()
5859

5960
private function createModelBuilderStruct(Request $request): ModelBuilderStruct
6061
{
61-
$requestRoute = $request->route();
6262
$filterQuery = $request->filter ?: [];
6363

64-
$baseModelName = $this->getBaseModelName($requestRoute);
64+
$baseModelName = $this->getBaseModelName($request);
6565
$filters = $this->parseFilter($filterQuery);
6666

6767
return new ModelBuilderStruct($baseModelName, $filters);
6868
}
6969

70-
private function getBaseModelName(Route $route): string
70+
private function getBaseModelName(Request $request): string
7171
{
7272
$modelCandidates = [];
73-
if ($route->controller) {
73+
$route = $request->route();
74+
$controller = $this->getControllerFromRoute($route);
75+
if ($controller) {
7476
$stringToRemove = "controller";
75-
$className = class_basename($route->controller);
77+
$className = class_basename($controller);
7678
$maybeBaseModel = substr_replace($className, '', strrpos(strtolower($className), $stringToRemove), strlen($stringToRemove));
7779
$modelCandidates[] = $maybeBaseModel;
7880

@@ -82,7 +84,7 @@ private function getBaseModelName(Route $route): string
8284
}
8385
}
8486

85-
$exploded = explode("/", $route->uri);
87+
$exploded = explode("/", $request->getRequesturi());
8688
$lastURISegment = strtolower(end($exploded));
8789
$camelizeURI = str_replace('_', '', ucwords($lastURISegment, '_'));
8890
$modelCandidates[] = $camelizeURI;
@@ -148,7 +150,7 @@ private function applyFilter(Builder $builder, array $filters): Builder
148150
return $builder;
149151
}
150152

151-
public function createModel(string $baseModelName)
153+
private function createModel(string $baseModelName)
152154
{
153155
$model = new $baseModelName;
154156
if (!($model instanceof Model)) {
@@ -157,4 +159,18 @@ public function createModel(string $baseModelName)
157159

158160
return $model;
159161
}
162+
163+
private function getControllerFromRoute($route)
164+
{
165+
if (is_array($route)) {
166+
$controllerWithMethod = current($route[1]);
167+
$splitedControllerMethod = explode('@', $controllerWithMethod);
168+
$routingHandler = current($splitedControllerMethod);
169+
$maybeController = new $routingHandler;
170+
171+
return new $maybeController instanceof Controller ? $maybeController : null;
172+
}
173+
174+
return $route->controller;
175+
}
160176
}

0 commit comments

Comments
 (0)