From 72fa7e562101547ae2af2b383ed04e5264c46e2e Mon Sep 17 00:00:00 2001 From: Chris Kankiewicz Date: Sat, 19 Jun 2021 23:53:09 -0700 Subject: [PATCH] Implemented custom CacheMiddleware --- app/config/cache.php | 17 +++++++++++++ app/config/container.php | 1 + app/src/Middlewares/CacheMiddleware.php | 34 +++++++++++++++++++++++++ 3 files changed, 52 insertions(+) create mode 100644 app/src/Middlewares/CacheMiddleware.php diff --git a/app/config/cache.php b/app/config/cache.php index eb016ac..025a0de 100644 --- a/app/config/cache.php +++ b/app/config/cache.php @@ -96,4 +96,21 @@ return [ $config->get('redis_port') ); }), + + /** + * HTTP cache values for controlling browser page cache durations. + * + * Possible values: An array of content types mapped to their cache duration + * in seconds + * + * Default value: [ + * 'application/json' => '300', + * 'application/zip' => '300', + * ] + */ + 'http_cache' => [ + 'application/json' => '300', + 'application/zip' => '300', + ], + ]; diff --git a/app/config/container.php b/app/config/container.php index ecb8843..ebb65ba 100644 --- a/app/config/container.php +++ b/app/config/container.php @@ -23,6 +23,7 @@ return [ /** Array of application middlewares */ 'middlewares' => function (ContainerInterface $container): array { return [ + Middlewares\CacheMiddleware::class, Middlewares\ThemeMiddleware::class, Middlewares\WhoopsMiddleware::class, ]; diff --git a/app/src/Middlewares/CacheMiddleware.php b/app/src/Middlewares/CacheMiddleware.php new file mode 100644 index 0000000..8494d9b --- /dev/null +++ b/app/src/Middlewares/CacheMiddleware.php @@ -0,0 +1,34 @@ +config = $config; + } + + /** Invoke the CacheMiddleware class. */ + public function __invoke(Request $request, RequestHandler $handler): ResponseInterface + { + $response = $handler->handle($request); + + foreach ($this->config->get('http_cache') as $contentType => $age) { + if (in_array($contentType, $response->getHeader('Content-Type'))) { + return $response->withHeader('Cache-Control', sprintf('max-age=%d', $age)); + } + } + + return $response->withHeader('Cache-Control', 'max-age=0, must-revalidate'); + } +}