2 declare(strict_types = 1);
18 use Psr\Http\Message\ResponseInterface;
19 use Psr\Http\Message\ServerRequestInterface;
20 use Psr\Http\Server\MiddlewareInterface;
21 use Psr\Http\Server\RequestHandlerInterface;
68 public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
71 if (($site = $request->getAttribute(
'site',
null)) instanceof
SiteInterface) {
72 $this->controller->domainStartPage = $site->getRootPageId();
74 $language = $request->getAttribute(
'language',
null);
76 $hasSiteConfiguration = $language instanceof SiteLanguage && $site instanceof Site;
79 if ($hasSiteConfiguration) {
81 $previousResult = $request->getAttribute(
'routing',
null);
82 if (!$previousResult) {
83 return GeneralUtility::makeInstance(ErrorController::class)->pageNotFoundAction(
85 'The requested page does not exist',
90 $requestId = (string)($request->getQueryParams()[
'id'] ??
'');
91 if (!empty($requestId)) {
94 return GeneralUtility::makeInstance(ErrorController::class)->pageNotFoundAction(
96 'The requested page does not exist',
101 $pageArguments =
new PageArguments(
102 (
int)($page[
'l10n_parent'] ?: $page[
'uid']),
103 (
string)($request->getQueryParams()[
'type'] ??
'0'),
106 $request->getQueryParams()
111 $pageArguments = $site->getRouter()->matchRequest($request, $previousResult);
112 }
catch (RouteNotFoundException $e) {
113 return GeneralUtility::makeInstance(ErrorController::class)->pageNotFoundAction(
115 'The requested page does not exist',
120 if (!$pageArguments->getPageId()) {
121 return GeneralUtility::makeInstance(ErrorController::class)->pageNotFoundAction(
123 'The requested page does not exist',
128 $this->controller->id = $pageArguments->getPageId();
129 $this->controller->type = $pageArguments->getPageType() ?? $this->controller->type;
130 $this->controller->MP = $pageArguments->getArguments()[
'MP'] ?? $this->controller->MP;
131 $request = $request->withAttribute(
'routing', $pageArguments);
133 if ($pageArguments->areDirty()) {
134 return GeneralUtility::makeInstance(ErrorController::class)->pageNotFoundAction(
136 'The requested URL is not distinct',
142 $queryParams = array_replace_recursive($request->getQueryParams(), $pageArguments->getArguments());
143 $request = $request->withQueryParams($queryParams);
144 $this->controller->setPageArguments($pageArguments);
151 $this->controller->siteScript = $request->getAttribute(
'normalizedParams')->getSiteScript();
152 if (!empty(
$GLOBALS[
'TYPO3_CONF_VARS'][
'SC_OPTIONS'][
'tslib/class.tslib_fe.php'][
'checkAlternativeIdMethods-PostProc'])) {
153 trigger_error(
'The "checkAlternativeIdMethods-PostProc" hook will be removed in TYPO3 v10.0 in favor of PSR-15. Use a middleware instead.', E_USER_DEPRECATED);
158 $this->controller->determineId();
165 if (!$hasSiteConfiguration) {
168 $this->controller->determineId();
171 return $handler->handle($request);
186 $_params = [
'pObj' => &$tsfe];
187 foreach (
$GLOBALS[
'TYPO3_CONF_VARS'][
'SC_OPTIONS'][
'tslib/class.tslib_fe.php'][
'checkAlternativeIdMethods-PostProc'] ?? [] as $_funcRef) {
188 GeneralUtility::callUserFunction($_funcRef, $_params, $tsfe);
198 $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)
199 ->getQueryBuilderForTable(
'pages');
203 ->add(GeneralUtility::makeInstance(DeletedRestriction::class))
204 ->add(GeneralUtility::makeInstance(FrontendWorkspaceRestriction::class));
207 $constraint = $queryBuilder->expr()->eq(
209 $queryBuilder->createNamedParameter($pageId, \PDO::PARAM_INT)
212 $constraint = $queryBuilder->expr()->eq(
214 $queryBuilder->createNamedParameter($pageId, \PDO::PARAM_STR)
218 $statement = $queryBuilder
219 ->select(
'uid',
'l10n_parent',
'pid')
224 $page = $statement->fetch();
239 $context->setAspect(
'backend.user', GeneralUtility::makeInstance(UserAspect::class, $user));
240 $context->setAspect(
'workspace', GeneralUtility::makeInstance(WorkspaceAspect::class, $user ? $user->workspace : 0));