fix: remove page parameter from return url when filtering

closes #869anjygz
This commit is contained in:
Björn Fromme
2025-09-30 18:11:25 +02:00
parent ea15d9ad32
commit 8c3115e364
4 changed files with 59 additions and 0 deletions
@@ -43,6 +43,7 @@ class ApplicationFilterController extends AbstractController
if ($form->isSubmitted() && $form->isValid()) {
$this->filterHandler->handleRequest($form);
$returnUrl = $this->getReturnUrl($request, 'app_admin_application_index');
$returnUrl = $this->removeQueryParameters($returnUrl, ['page']);
return new HxRedirectResponse($returnUrl);
}
@@ -41,6 +41,7 @@ class AssignmentFilterController extends AbstractController
if ($form->isSubmitted() && $form->isValid()) {
$this->filterHandler->handleRequest($form);
$returnUrl = $this->getReturnUrl($request, 'app_administrative_assignment_index');
$returnUrl = $this->removeQueryParameters($returnUrl, ['page']);
return new HxRedirectResponse($returnUrl);
}
@@ -34,6 +34,7 @@ class DestinationFilterController extends AbstractController
if ($form->isSubmitted() && $form->isValid()) {
$this->filterHandler->handleRequest($form);
$returnUrl = $this->getReturnUrl($request, 'app_administrative_system_destination_index');
$returnUrl = $this->removeQueryParameters($returnUrl, ['page']);
return new HxRedirectResponse($returnUrl);
}
+56
View File
@@ -12,4 +12,60 @@ trait ReturnUrlTrait
return rawurldecode($request->query->get('r', $defaultUrl));
}
/**
* Remove specified query parameters from a URL.
*
* @param string $url The URL to process
* @param string[] $parametersKeys Array of query parameter keys to remove
*
* @return string The URL without the specified query parameters
*/
public function removeQueryParameters(string $url, array $parametersKeys): string
{
if ([] === $parametersKeys) {
return $url;
}
$urlParts = parse_url($url);
if (false === isset($urlParts['query'])) {
return $url;
}
parse_str($urlParts['query'], $queryParams);
foreach ($parametersKeys as $key) {
unset($queryParams[$key]);
}
$urlParts['query'] = http_build_query($queryParams);
if ('' === $urlParts['query']) {
unset($urlParts['query']);
}
// Rebuild URL
$result = '';
if (isset($urlParts['scheme'])) {
$result .= $urlParts['scheme'].'://';
}
if (isset($urlParts['host'])) {
$result .= $urlParts['host'];
}
if (isset($urlParts['port'])) {
$result .= ':'.$urlParts['port'];
}
if (isset($urlParts['path'])) {
$result .= $urlParts['path'];
}
if (isset($urlParts['query'])) {
$result .= '?'.$urlParts['query'];
}
if (isset($urlParts['fragment'])) {
$result .= '#'.$urlParts['fragment'];
}
return $result;
}
}