0 follower

Final Class Yiisoft\HttpMiddleware\HttpCache\HttpCacheMiddleware

InheritanceYiisoft\HttpMiddleware\HttpCache\HttpCacheMiddleware
ImplementsPsr\Http\Server\MiddlewareInterface

Middleware that implements HTTP caching using Cache-Control, ETag, and Last-Modified headers.

Method Details

Hide inherited methods

__construct() public method

public mixed __construct ( \Psr\Http\Message\ResponseFactoryInterface $responseFactory, Yiisoft\HttpMiddleware\HttpCache\CacheControlProvider\CacheControlProviderInterface $cacheControlProvider = new NullCacheControlProvider(), Yiisoft\HttpMiddleware\HttpCache\LastModifiedProvider\LastModifiedProviderInterface $lastModifiedProvider = new NullLastModifiedProvider(), Yiisoft\HttpMiddleware\HttpCache\ETagProvider\ETagProviderInterface $eTagProvider = new NullETagProvider(), Yiisoft\HttpMiddleware\HttpCache\ETagGenerator\ETagGeneratorInterface $eTagGenerator = new DefaultETagGenerator() )
$responseFactory \Psr\Http\Message\ResponseFactoryInterface

The response factory to create responses.

$cacheControlProvider Yiisoft\HttpMiddleware\HttpCache\CacheControlProvider\CacheControlProviderInterface

The cache control headers provider.

$lastModifiedProvider Yiisoft\HttpMiddleware\HttpCache\LastModifiedProvider\LastModifiedProviderInterface

The last modified dates provider.

$eTagProvider Yiisoft\HttpMiddleware\HttpCache\ETagProvider\ETagProviderInterface

The provider for {@see \Yiisoft\HttpMiddleware\HttpCache\ETag}.

$eTagGenerator Yiisoft\HttpMiddleware\HttpCache\ETagGenerator\ETagGeneratorInterface

The {@see \Yiisoft\HttpMiddleware\HttpCache\ETag} string values generator.

                public function __construct(
    private readonly ResponseFactoryInterface $responseFactory,
    private readonly CacheControlProviderInterface $cacheControlProvider = new NullCacheControlProvider(),
    private readonly LastModifiedProviderInterface $lastModifiedProvider = new NullLastModifiedProvider(),
    private readonly ETagProviderInterface $eTagProvider = new NullETagProvider(),
    private readonly ETagGeneratorInterface $eTagGenerator = new DefaultETagGenerator(),
) {
}

            
process() public method

public \Psr\Http\Message\ResponseInterface process ( \Psr\Http\Message\ServerRequestInterface $request, \Psr\Http\Server\RequestHandlerInterface $handler )
$request \Psr\Http\Message\ServerRequestInterface
$handler \Psr\Http\Server\RequestHandlerInterface

                public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
{
    if (!in_array($request->getMethod(), ['GET', 'HEAD'], true)) {
        return $handler->handle($request);
    }
    $cacheControl = $this->cacheControlProvider->get($request);
    $eTag = $this->eTagProvider->get($request);
    $eTagHeader = $eTag === null ? null : new ETagHeader($eTag, $this->eTagGenerator);
    $lastModified = $this->lastModifiedProvider->get($request);
    $cacheIsValid = $this->validateCache($request, $lastModified, $eTagHeader);
    if ($cacheIsValid) {
        $response = $this->responseFactory->createResponse(304);
        $response = $this->addETagHeader($response, $eTagHeader);
        $response = $this->addCacheControlHeader($response, $cacheControl);
        if ($eTagHeader === null) {
            $response = $this->addLastModifiedHeader($response, $lastModified);
        }
        return $response;
    }
    $response = $handler->handle($request);
    $response = $this->addETagHeader($response, $eTagHeader);
    $response = $this->addCacheControlHeader($response, $cacheControl);
    return $this->addLastModifiedHeader($response, $lastModified);
}