Skip to content

Commit adb63e3

Browse files
committed
Remove filter on URI when using lumen closure
1 parent 5e2fefc commit adb63e3

File tree

2 files changed

+37
-4
lines changed

2 files changed

+37
-4
lines changed

src/RequestParser.php

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ class RequestParser
3939
public function __construct(Request $request)
4040
{
4141
$requestParserConfig = Config::get('request_parser');
42-
if(is_null($requestParserConfig) || empty($requestParserConfig)) {
42+
if (is_null($requestParserConfig) || empty($requestParserConfig)) {
4343
$this->modelNamespaces = ["App\\Models"];
4444
} else {
4545
$this->modelNamespaces = $requestParserConfig['model_namespaces'];
@@ -85,7 +85,8 @@ private function getBaseModelName(Request $request): string
8585

8686
$exploded = explode("/", $request->getRequesturi());
8787
$lastURISegment = strtolower(end($exploded));
88-
$camelizeURI = str_replace('_', '', ucwords($lastURISegment, '_'));
88+
$lastURINoQuery = current(explode("?", $lastURISegment, 2));
89+
$camelizeURI = str_replace('_', '', ucwords($lastURINoQuery, '_'));
8990
$modelCandidates[] = $camelizeURI;
9091

9192
$modelName = $this->getModelFromNamespaces($camelizeURI, $this->modelNamespaces);
@@ -162,8 +163,12 @@ private function createModel(string $baseModelName)
162163
private function getControllerFromRoute($route)
163164
{
164165
if (is_array($route)) {
165-
$controllerWithMethod = current($route[1]);
166-
$splitedControllerMethod = explode('@', $controllerWithMethod);
166+
$maybeControllerWithMethod = current($route[1]);
167+
if ($maybeControllerWithMethod instanceof \Closure) {
168+
return null;
169+
}
170+
171+
$splitedControllerMethod = explode('@', $maybeControllerWithMethod);
167172
$routingHandler = current($splitedControllerMethod);
168173
$maybeController = new $routingHandler;
169174

tests/RequestParserTest.php

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,34 @@ function testFilterNormalViaClosure()
140140
$this->assertEquals([1], $builder->getBindings());
141141
}
142142

143+
function testFilterNormalViaClosureURIHasFilter()
144+
{
145+
$uri = 'some_model?filter[x][is]=1';
146+
$routeResolverResult = [
147+
function() {}
148+
];
149+
$query = new ParameterBag([
150+
"filter" => [
151+
"x" => [
152+
"is" => 1
153+
]
154+
],
155+
]);
156+
$requestParserOptions = [
157+
'model_namespaces' => [
158+
'LIQRGV\QueryFilter\Mocks',
159+
]
160+
];
161+
162+
$request = $this->createRequestWithRouteArray($uri, $routeResolverResult, $query, $requestParserOptions);
163+
164+
$requestParser = new RequestParser($request);
165+
$builder = $requestParser->getBuilder();
166+
167+
$this->assertEquals("select * from \"some_models\" where \"x\" = ?", $builder->toSql());
168+
$this->assertEquals([1], $builder->getBindings());
169+
}
170+
143171
function testFilterRouteIsArray()
144172
{
145173
$uri = 'some_model';

0 commit comments

Comments
 (0)