aklump / slim-response-cache
Slim middleware for caching responses for subsequent requests.
Requires
- slim/http-cache: ^0.4.0
This package is auto-updated.
Last update: 2024-12-17 06:53:26 UTC
README
Summary
This project provides a means of caching responses so that subsequent requests do not pass through the route callbacks. It is helpful if the route callbacks involve expensive calculations to generate content. It is built on the HTTP Caching middleware and should be used instead of that middleware. It ships with a file-based cache storage, but supports other types of caching via \AKlump\Slim\Middleware\ContentCacheInterface
.
Quick Start
$container = $app->getContainer();
$container['cache'] = function () {
return new \Slim\HttpCache\CacheProvider();
};
$container['response_cache'] = function () {
return new \AKlump\Slim\Middleware\FileCache('/path/to/cache/dir');
};
// Register this middleware.
$app->add(new \AKlump\Slim\Middleware\ContentCache($container['cache'], $container['response_cache'], 3600));
Requirements
- The response body must be able to be cast to a string.
Contributing
If you find this project useful... please consider making a donation.
Installation
-
This middleware replaces HTTP Caching therefore you should not add that middleware as shown in those instructions. Do not do the following:
$app->add(new \Slim\HttpCache\Cache('public', 86400));
-
However, you will need to register the service provider from that middleware as shown in the Quick Start above.
Advanced Usage
How do I alter the body prior to caching?
If you want to alter the response body content before it is written to cache use the fourth argument callback as shown below, which adds a last modified note
$app->add(new \AKlump\Slim\Middleware\ContentCache(
$container['cache'],
$container['response_cache'],
3600,
function (\DateTime $modified, $html_body) use ($settings) {
return $html_body . sprintf("Last modified: %s', $modified->format('r'));
}
));
How do I use a database for caching content?
You may write your own class that implements \AKlump\Slim\Middleware\ContentCacheInterface
.