Skip to content

Commit 478e09d

Browse files
committed
Merge branch 'hotfix/cant-read-model-from-lumen-closure'
2 parents fee66d4 + adb63e3 commit 478e09d

File tree

2 files changed

+33
-5
lines changed

2 files changed

+33
-5
lines changed

src/RequestParser.php

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

9393
$exploded = explode("/", $request->getRequesturi());
9494
$lastURISegment = strtolower(end($exploded));
95-
$camelizeURI = str_replace('_', '', ucwords($lastURISegment, '_'));
95+
$lastURINoQuery = current(explode("?", $lastURISegment, 2));
96+
$camelizeURI = str_replace('_', '', ucwords($lastURINoQuery, '_'));
9697
$modelCandidates[] = $camelizeURI;
9798

9899
$modelName = $this->getModelFromNamespaces($camelizeURI, $this->modelNamespaces);
@@ -205,8 +206,12 @@ private function createModel(string $baseModelName)
205206
private function getControllerFromRoute($route)
206207
{
207208
if (is_array($route)) {
208-
$controllerWithMethod = current($route[1]);
209-
$splitedControllerMethod = explode('@', $controllerWithMethod);
209+
$maybeControllerWithMethod = current($route[1]);
210+
if ($maybeControllerWithMethod instanceof \Closure) {
211+
return null;
212+
}
213+
214+
$splitedControllerMethod = explode('@', $maybeControllerWithMethod);
210215
$routingHandler = current($splitedControllerMethod);
211216
$maybeController = new $routingHandler;
212217

tests/RequestParserLumenTest.php

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,29 @@ function testFilterRouteIsArray()
1616
$routeResolverResult = [
1717
'uses' => MockLumenModelController::class . '@' . 'index',
1818
];
19+
$query = new ParameterBag([]);
20+
$requestParserOptions = [
21+
'model_namespaces' => [
22+
'LIQRGV\QueryFilter\Mocks',
23+
]
24+
];
25+
26+
$request = $this->createRequestWithRouteArray($uri, $routeResolverResult, $query, $requestParserOptions);
27+
28+
$requestParser = new RequestParser($request);
29+
$builder = $requestParser->getBuilder();
30+
31+
$query = $builder->getQuery();
32+
$this->assertEquals("mock_lumen_models", $query->from);
33+
$this->assertEquals([], $builder->getBindings());
34+
}
35+
36+
function testFilterRouteIsArrayURIHasFilter()
37+
{
38+
$uri = 'mock_model?filter[x][is]=1';
39+
$routeResolverResult = [
40+
function() {}
41+
];
1942
$query = new ParameterBag([
2043
"filter" => [
2144
"x" => [
@@ -35,7 +58,7 @@ function testFilterRouteIsArray()
3558
$builder = $requestParser->getBuilder();
3659

3760
$query = $builder->getQuery();
38-
$this->assertEquals("mock_lumen_models", $query->from);
61+
$this->assertEquals("mock_models", $query->from);
3962
$this->assertEquals("x", $query->wheres[0]['column']);
4063
$this->assertEquals("=", $query->wheres[0]['operator']);
4164
$this->assertEquals([1], $builder->getBindings());

0 commit comments

Comments
 (0)