Skip to content

Commit 4cd6b23

Browse files
committed
Add Http\ServerRequest::getQueryParam method
Similar to the Http\ServerRequest::getParsedBodyParam method, this method retrives a single parameter from the request query, or the default value if not available. Signed-off-by: Maurício Meneghini Fauth <mauricio@fauth.dev>
1 parent 6785c97 commit 4cd6b23

3 files changed

Lines changed: 44 additions & 21 deletions

File tree

libraries/classes/Controllers/Setup/MainController.php

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,9 @@ public function __invoke(ServerRequest $request): void
2323
Core::fatalError(__('Configuration already exists, setup is disabled!'));
2424
}
2525

26-
$params = $request->getQueryParams();
27-
28-
$page = 'index';
29-
if (isset($params['page']) && in_array($params['page'], ['form', 'config', 'servers'], true)) {
30-
$page = $params['page'];
31-
}
26+
/** @var mixed $pageParam */
27+
$pageParam = $request->getQueryParam('page');
28+
$page = in_array($pageParam, ['form', 'config', 'servers'], true) ? $pageParam : 'index';
3229

3330
Core::noCacheHeader();
3431

@@ -37,44 +34,46 @@ public function __invoke(ServerRequest $request): void
3734

3835
if ($page === 'form') {
3936
echo (new FormController($GLOBALS['ConfigFile'], new Template()))([
40-
'formset' => $params['formset'] ?? null,
37+
'formset' => $request->getQueryParam('formset'),
4138
]);
4239

4340
return;
4441
}
4542

4643
if ($page === 'config') {
4744
echo (new ConfigController($GLOBALS['ConfigFile'], new Template()))([
48-
'formset' => $params['formset'] ?? null,
49-
'eol' => $params['eol'] ?? null,
45+
'formset' => $request->getQueryParam('formset'),
46+
'eol' => $request->getQueryParam('eol'),
5047
]);
5148

5249
return;
5350
}
5451

5552
if ($page === 'servers') {
5653
$controller = new ServersController($GLOBALS['ConfigFile'], new Template());
57-
if (isset($params['mode']) && $params['mode'] === 'remove' && $request->isPost()) {
54+
/** @var mixed $mode */
55+
$mode = $request->getQueryParam('mode');
56+
if ($mode === 'remove' && $request->isPost()) {
5857
$controller->destroy([
59-
'id' => $params['id'] ?? null,
58+
'id' => $request->getQueryParam('id'),
6059
]);
6160
header('Location: ../setup/index.php' . Url::getCommonRaw(['route' => '/setup']));
6261

6362
return;
6463
}
6564

6665
echo $controller->index([
67-
'formset' => $params['formset'] ?? null,
68-
'mode' => $params['mode'] ?? null,
69-
'id' => $params['id'] ?? null,
66+
'formset' => $request->getQueryParam('formset'),
67+
'mode' => $mode,
68+
'id' => $request->getQueryParam('id'),
7069
]);
7170

7271
return;
7372
}
7473

7574
echo (new HomeController($GLOBALS['ConfigFile'], new Template()))([
76-
'formset' => $params['formset'] ?? null,
77-
'version_check' => $params['version_check'] ?? null,
75+
'formset' => $request->getQueryParam('formset'),
76+
'version_check' => $request->getQueryParam('version_check'),
7877
]);
7978
}
8079
}

libraries/classes/Http/ServerRequest.php

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -309,11 +309,7 @@ public function getParam(string $param, $default = null)
309309
return $postParams->$param;
310310
}
311311

312-
if (isset($getParams[$param])) {
313-
return $getParams[$param];
314-
}
315-
316-
return $default;
312+
return $getParams[$param] ?? $default;
317313
}
318314

319315
/**
@@ -336,6 +332,18 @@ public function getParsedBodyParam(string $param, $default = null)
336332
return $default;
337333
}
338334

335+
/**
336+
* @param mixed $default
337+
*
338+
* @return mixed
339+
*/
340+
public function getQueryParam(string $param, $default = null)
341+
{
342+
$getParams = $this->getQueryParams();
343+
344+
return $getParams[$param] ?? $default;
345+
}
346+
339347
public function isPost(): bool
340348
{
341349
return $this->getMethod() === 'POST';

test/classes/Http/ServerRequestTest.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,4 +47,20 @@ public function providerForTestGetRoute(): iterable
4747
['/', [], ['db' => 'db', 'table' => 'table']],
4848
];
4949
}
50+
51+
public function testGetQueryParam(): void
52+
{
53+
$queryParams = ['key1' => 'value1', 'key2' => ['value2'], 'key4' => ''];
54+
$requestStub = $this->createStub(ServerRequestInterface::class);
55+
$requestStub->method('getQueryParams')->willReturn($queryParams);
56+
$request = new ServerRequest($requestStub);
57+
$this->assertSame('value1', $request->getQueryParam('key1'));
58+
$this->assertSame('value1', $request->getQueryParam('key1', 'default'));
59+
$this->assertSame(['value2'], $request->getQueryParam('key2'));
60+
$this->assertSame(['value2'], $request->getQueryParam('key2', 'default'));
61+
$this->assertNull($request->getQueryParam('key3'));
62+
$this->assertSame('default', $request->getQueryParam('key3', 'default'));
63+
$this->assertSame('', $request->getQueryParam('key4'));
64+
$this->assertSame('', $request->getQueryParam('key4', 'default'));
65+
}
5066
}

0 commit comments

Comments
 (0)