TYPO3 12 and later use request attributes to store internal informations. How does it work to add self defined attributes in TYPO3 extensions? I could not find anything in the docs.
TYPO3/typo3_src-13.2.1/typo3/sysext/core/Classes/Http/ServerRequest.php:
namespace TYPO3\CMS\Core\Http;
class ServerRequest extends Request implements ServerRequestInterface
{
protected array $attributes = [];
You can use a PSR-15 Middleware to achive that.
All you need is a Middleware class like:
Classes/Middleware/RequestEnrichingMiddleware.php
<?php
declare(strict_types=1);
namespace VENDOR\ExtName\Middleware;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\MiddlewareInterface;
use Psr\Http\Server\RequestHandlerInterface;
class RequestEnrichingMiddleware implements MiddlewareInterface
{
public function process(
ServerRequestInterface $request,
RequestHandlerInterface $handler,
): ResponseInterface {
$myCustomDataArray = [
'Foo' => 'Bar',
'Foooo' => 'Baar',
];
$request = $request->withAttribute('myCustomDataArray', $myCustomDataArray);
return $handler->handle($request);
}
}
And then you must register this middleware in: Configuration/RequestMiddlewares.php
<?php
return [
'frontend' => [
'vendor/my-middleware-identifier' => [
'target' => \VENDOR\ExtName\Middleware\RequestEnrichingMiddleware::class,
'after' => [
'typo3/cms-core/response-propagation',
],
],
],
];
For more information see:
https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/ApiOverview/RequestLifeCycle/Middlewares.html#enriching-the-request