Skip to content

Commit

Permalink
[TASK] Move page rendering preparations into middleware
Browse files Browse the repository at this point in the history
In the course of making TSFE request/response aware,
we split the rendering preparations of TSFE
into a PSR-15 middleware.

This the first step to extract other parts, like
redirecting to shortcuts/ mountpoints and sending
http headers as well into middleware implementations.

Resolves: #84909
Releases: master
Change-Id: I704ae89a23c8e254574e19a78ecec363f182c747
Reviewed-on: https://review.typo3.org/56833
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Georg Ringer <georg.ringer@gmail.com>
Tested-by: Georg Ringer <georg.ringer@gmail.com>
Reviewed-by: Frank Naegler <frank.naegler@typo3.org>
Tested-by: Frank Naegler <frank.naegler@typo3.org>
  • Loading branch information
helhum authored and NeoBlack committed May 4, 2018
1 parent e1a8c99 commit 06092ea
Show file tree
Hide file tree
Showing 4 changed files with 93 additions and 24 deletions.
24 changes: 0 additions & 24 deletions typo3/sysext/frontend/Classes/Http/RequestHandler.php
Expand Up @@ -68,30 +68,6 @@ public function handle(ServerRequestInterface $request): ResponseInterface
/** @var TypoScriptFrontendController $controller */
$controller = $GLOBALS['TSFE'];

// Starts the template
$this->timeTracker->push('Start Template', '');
$controller->initTemplate();
$this->timeTracker->pull();
// Get from cache
$this->timeTracker->push('Get Page from cache', '');
$controller->getFromCache();
$this->timeTracker->pull();
// Get config if not already gotten
// After this, we should have a valid config-array ready
$controller->getConfigArray();
// Setting language and locale
$this->timeTracker->push('Setting language and locale', '');
$controller->settingLanguage();
$controller->settingLocale();
$this->timeTracker->pull();

// Convert POST data to utf-8 for internal processing if metaCharset is different
$controller->convPOSTCharset();

$controller->initializeRedirectUrlHandlers();

$controller->handleDataSubmission();

// Check for shortcut page and redirect
$controller->checkPageForShortcutRedirect();
$controller->checkPageForMountpointRedirect();
Expand Down
@@ -0,0 +1,84 @@
<?php
declare(strict_types = 1);

namespace TYPO3\CMS\Frontend\Middleware;

/*
* This file is part of the TYPO3 CMS project.
*
* It is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License, either version 2
* of the License, or any later version.
*
* For the full copyright and license information, please read the
* LICENSE.txt file that was distributed with this source code.
*
* The TYPO3 project - inspiring people to share!
*/

use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\MiddlewareInterface;
use Psr\Http\Server\RequestHandlerInterface as PsrRequestHandlerInterface;
use TYPO3\CMS\Core\TimeTracker\TimeTracker;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController;

/**
* Initialization of TypoScriptFrontendController
*
* Do all necessary preparation steps for rendering
*/
class PrepareTypoScriptFrontendRendering implements MiddlewareInterface
{
/**
* @var TypoScriptFrontendController
*/
protected $controller;

/**
* @var TimeTracker
*/
protected $timeTracker;

public function __construct(TypoScriptFrontendController $controller = null, TimeTracker $timeTracker = null)
{
$this->controller = $controller ?: $GLOBALS['TSFE'];
$this->timeTracker = $timeTracker ?: GeneralUtility::makeInstance(TimeTracker::class);
}

/**
* Initialize TypoScriptFrontendController to the point right before rendering of the page is triggered
*
* @param ServerRequestInterface $request
* @param PsrRequestHandlerInterface $handler
* @return ResponseInterface
*/
public function process(ServerRequestInterface $request, PsrRequestHandlerInterface $handler): ResponseInterface
{
// Starts the template
$this->timeTracker->push('Start Template', '');
$this->controller->initTemplate();
$this->timeTracker->pull();
// Get from cache
$this->timeTracker->push('Get Page from cache', '');
$this->controller->getFromCache();
$this->timeTracker->pull();
// Get config if not already gotten
// After this, we should have a valid config-array ready
$this->controller->getConfigArray();
// Setting language and locale
$this->timeTracker->push('Setting language and locale', '');
$this->controller->settingLanguage();
$this->controller->settingLocale();
$this->timeTracker->pull();

// Convert POST data to utf-8 for internal processing if metaCharset is different
$this->controller->convPOSTCharset();

$this->controller->initializeRedirectUrlHandlers();
$this->controller->handleDataSubmission();

return $handler->handle($request);
}
}
6 changes: 6 additions & 0 deletions typo3/sysext/frontend/Configuration/RequestMiddlewares.php
Expand Up @@ -90,5 +90,11 @@
'typo3/cms-frontend/site',
]
],
'typo3/cms-frontend/prepare-tsfe-rendering' => [
'target' => \TYPO3\CMS\Frontend\Middleware\PrepareTypoScriptFrontendRendering::class,
'after' => [
'typo3/cms-frontend/page-resolver',
]
],
]
];
3 changes: 3 additions & 0 deletions typo3/sysext/redirects/Configuration/RequestMiddlewares.php
Expand Up @@ -7,6 +7,9 @@
'frontend' => [
'typo3/cms-redirects/redirecthandler' => [
'target' => \TYPO3\CMS\Redirects\Http\Middleware\RedirectHandler::class,
'before' => [
'typo3/cms-frontend/prepare-tsfe-rendering',
]
],
],
];

0 comments on commit 06092ea

Please sign in to comment.