66use Illuminate \Database \Eloquent \Builder ;
77use Illuminate \Database \Eloquent \Model ;
88use Illuminate \Http \Request ;
9+ use Illuminate \Routing \Controller ;
910use Illuminate \Routing \Route ;
1011use Illuminate \Support \Facades \Config ;
1112use 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