Im nachfolgenden Beispiel wird eine Middleware vor "typo3/cms-frontend/page-resolver" platziert. An dieser Stelle ist jedoch noch kein TSFE vorhanden ("typo3/cms-frontend/tsfe" bzw. "typo3/cms-frontend/prepare-tsfe-rendering" werden erst später ausgeführt). Die TypoScript Konfiguration kann in diesem Falle dennoch manuell mithilfe der Klassen "RootlineUtility" und "TemplateService"geladen werden, sofern die Middleware nach "typo3/cms-frontend/site" ausgeführt wird.
Configuration\RequestMiddlewares.php
<?php
return [
'frontend' => [
'vendor/extension/earlymiddleware' => [
'target' => Vendor\Extension\Middleware\EarlyMiddleware::class,
'after' => [
'typo3/cms-frontend/site'
],
'before' => [
'typo3/cms-frontend/backend-user-authentication'
],
],
],
];
Middleware\EarlyMiddleware.php
<?php
namespace Vendor\Extension\Middleware;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\MiddlewareInterface;
use Psr\Http\Server\RequestHandlerInterface;
use TYPO3\CMS\Core\Site\Entity\Site;
use TYPO3\CMS\Core\TypoScript\TemplateService;
use TYPO3\CMS\Core\Utility\RootlineUtility;
use TYPO3\CMS\Core\Utility\GeneralUtility;
/**
* EarlyMiddleware
*/
class EarlyMiddleware implements MiddlewareInterface
{
/**
* Hook to preprocess the current request
*
* @param ServerRequestInterface $request
* @param RequestHandlerInterface $handler
* @return ResponseInterface
*/
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
{
if(strpos(strtolower($request->getUri()->getPath()), '/earlymiddleware') === 0) {
/** @var Site $site */
$site = $request->getAttribute('site');
/** @var RootlineUtility $rootlineUtility */
$rootlineUtility = GeneralUtility::makeInstance(RootlineUtility::class, $site->getRootPageId());
$rootline = $rootlineUtility->get();
/** @var TemplateService $templateService */
$templateService = GeneralUtility::makeInstance(TemplateService::class);
$templateService->tt_track = 0;
$templateService->runThroughTemplates($rootline);
$templateService->generateConfig();
// Now setup and constants are available like this:
//$templateService->setup['module.']['tx_extension.']['settings.']['foo'];
//$templateService->setup_constants['module.']['tx_extension.']['settings.']['foo'];
// Do anything...
}
// Proceed further middlewares
return $handler->handle($request);
}
}
Kommentare