update readme

This commit is contained in:
lubiana 2022-04-05 00:02:52 +02:00
parent f054af35c3
commit fed49011bd
Signed by: lubiana
SSH key fingerprint: SHA256:vW1EA0fRR3Fw+dD/sM0K+x3Il2gSry6YRYHqOeQwrfk
88 changed files with 7546 additions and 176 deletions

View file

@ -0,0 +1,36 @@
<?php declare(strict_types=1);
namespace Lubian\NoFramework\Middleware;
use Laminas\Diactoros\Response;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\MiddlewareInterface;
use Psr\Http\Server\RequestHandlerInterface;
use Symfony\Contracts\Cache\CacheInterface;
use Symfony\Contracts\Cache\ItemInterface;
use function base64_encode;
final class CacheMiddleware implements MiddlewareInterface
{
public function __construct(private CacheInterface $cache, private Response\Serializer $serializer)
{
}
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
{
if ($request->getMethod() === 'GET') {
$key = (string) $request->getUri();
$key = base64_encode($key);
$callback = fn () => $handler->handle($request);
$cached = $this->cache->get($key, function (ItemInterface $item) use ($callback) {
$item->expiresAfter(120);
$response = $callback();
return $this->serializer::toString($response);
});
return $this->serializer::fromString($cached);
}
return $handler->handle($request);
}
}