You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I have a middleware which parses the lang query parameter and set's the language in the container. Afterwards it removes the lang parameter from the query array and gives this new request to the next handler. This works aslong as you have at least another query parameter.
if you don't have a query parameter this psr-7 implementation automatically parses Uri directly.
publicfunction__invoke(Request$request, RequestHandler$handler): Response
{
$query = $request->getQueryParams();
// do somthing with the $query['lang] entry// cleanup Parameters
unset($query['lang']);
$request = $request->withQueryParams($query);
return$handler->handle($request);
}
When I later validate the request for "unwanted" parameters with something like:
publicfunction__invoke(Request$request, Response$response)
{
$params = $request->getQueryParams();
if (isset($params['lang'])) {
// throw exception or what ever.
}
}
It checks to see if the underlying array is empty. It is debatable whether we should do this or not to trigger the reparsing of the query params. @akrabat do you believe an empty array should retrigger parsing of the query params? I have no strong position on this.
A workaround would be to ensure the array is not empty when you modify it with your middleware:
publicfunction__invoke(Request$request, RequestHandler$handler): Response
{
$query = $request->getQueryParams();
// do something with the $query['lang] entry// cleanup Parameters
unset($query['lang']);
// setup workaround flag to ensure array is not empty$query['QUERY_PARAMS_PARSED'] = true;
$request = $request->withQueryParams($query);
return$handler->handle($request);
}
A workaround would be to ensure the array is not empty when you modify it with your middleware:
public function __invoke(Request $request, RequestHandler $handler): Response
{
$query = $request->getQueryParams();
// do something with the $query['lang] entry
// cleanup Parameters
unset($query['lang']);
// setup workaround flag to ensure array is not empty
$query['QUERY_PARAMS_PARSED'] = true;
$request = $request->withQueryParams($query);
return $handler->handle($request);
}
of course I can add a dummy parameter, but later in the code I validate all parameters and if we get an invalid parameter we drop the request. In this case the API endpoint as no GET parameters which are not globally handled (language in this case) so I wouldn't expect a GET parameter reaching the API endpoint controller. I would expect that's a middle ware is used for, preparing the request for the controller.
Hi,
I have a middleware which parses the
lang
query parameter and set's the language in the container. Afterwards it removes thelang
parameter from the query array and gives this newrequest
to the next handler. This works aslong as you have at least another query parameter.if you don't have a query parameter this psr-7 implementation automatically parses
Uri
directly.When I later validate the request for "unwanted" parameters with something like:
The
$params
has thelang
parameter set again because of this linehttps://github.com/slimphp/Slim-Http/blob/master/src/ServerRequest.php#L220
Not sure why slim/http does it this way but I think it's wrong, because then
Request::withQueryParams([])
is pretty useless and doesn't work.Not sure if there is a workaround...
thanks
The text was updated successfully, but these errors were encountered: