getAttribute('site', null); if (!$site instanceof Site) { return GeneralUtility::makeInstance(ErrorController::class)->pageNotFoundAction( $request, 'No site configuration found.', ['code' => PageAccessFailureReasons::PAGE_NOT_FOUND] ); } /** @var SiteRouteResult|null $previousResult */ $previousResult = $request->getAttribute('routing', null); if (!$previousResult) { return GeneralUtility::makeInstance(ErrorController::class)->pageNotFoundAction( $request, 'The requested page does not exist', ['code' => PageAccessFailureReasons::PAGE_NOT_FOUND] ); } // Check for the route arguments or Query Parameter ID try { /** @var PageArguments $pageArguments */ $pageArguments = $site->getRouter()->matchRequest($request, $previousResult); $request = $request->withAttribute('routing', $pageArguments); } catch (RouteNotFoundException $e) { return GeneralUtility::makeInstance(ErrorController::class)->pageNotFoundAction( $request, 'The requested page does not exist', ['code' => PageAccessFailureReasons::PAGE_NOT_FOUND] ); } if (!$pageArguments->getPageId()) { return GeneralUtility::makeInstance(ErrorController::class)->pageNotFoundAction( $request, 'The requested page does not exist', ['code' => PageAccessFailureReasons::PAGE_NOT_FOUND] ); } // stop in case arguments are dirty (=defined twice in route and GET query parameters) if ($pageArguments->areDirty()) { return GeneralUtility::makeInstance(ErrorController::class)->pageNotFoundAction( $request, 'The requested URL is not distinct', ['code' => PageAccessFailureReasons::PAGE_NOT_FOUND] ); } // merge the PageArguments with the request query parameters $queryParams = array_replace_recursive($request->getQueryParams(), $pageArguments->getArguments()); $request = $request->withQueryParams($queryParams); return $handler->handle($request); } }