aklump/slim-response-cache

Slim middleware for caching responses for subsequent requests.

0.2.1 2019-05-16 18:55 UTC

This package is auto-updated.

Last update: 2021-09-17 00:14:14 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

  1. 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

  1. 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));
    
  2. 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.