PHP code example of spatie / laravel-responsecache
1. Go to this page and download the library: Download spatie/laravel-responsecache library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
spatie / laravel-responsecache example snippets
// config/responsecache.php
return [
/*
* Determine if the response cache middleware should be enabled.
*/
'enabled' => env('RESPONSE_CACHE_ENABLED', true),
/*
* The given class will determinate if a request should be cached. The
* default class will cache all successful GET-requests.
*
* You can provide your own class given that it implements the
* CacheProfile interface.
*/
'cache_profile' => Spatie\ResponseCache\CacheProfiles\CacheAllSuccessfulGetRequests::class,
/*
* Optionally, you can specify a header that will force a cache bypass.
* This can be useful to monitor the performance of your application.
*/
'cache_bypass_header' => [
'name' => env('CACHE_BYPASS_HEADER_NAME', null),
'value' => env('CACHE_BYPASS_HEADER_VALUE', null),
],
/*
* When using the default CacheRequestFilter this setting controls the
* default number of seconds responses must be cached.
*/
'cache_lifetime_in_seconds' => env('RESPONSE_CACHE_LIFETIME', 60 * 60 * 24 * 7),
/*
* This setting determines if a http header named with the cache time
* should be added to a cached response. This can be handy when
* debugging.
*/
'add_cache_time_header' => env('APP_DEBUG', true),
/*
* This setting determines the name of the http header that contains
* the time at which the response was cached
*/
'cache_time_header_name' => env('RESPONSE_CACHE_HEADER_NAME', 'laravel-responsecache'),
/*
* This setting determines if a http header named with the cache age
* should be added to a cached response. This can be handy when
* debugging.
* ONLY works when "add_cache_time_header" is also active!
*/
'add_cache_age_header' => env('RESPONSE_CACHE_AGE_HEADER', false),
/*
* This setting determines the name of the http header that contains
* the age of cache
*/
'cache_age_header_name' => env('RESPONSE_CACHE_AGE_HEADER_NAME', 'laravel-responsecache-age'),
/*
* Here you may define the cache store that should be used to store
* requests. This can be the name of any store that is
* configured in app/config/cache.php
*/
'cache_store' => env('RESPONSE_CACHE_DRIVER', 'file'),
/*
* Here you may define replacers that dynamically replace content from the response.
* Each replacer must implement the Replacer interface.
*/
'replacers' => [
\Spatie\ResponseCache\Replacers\CsrfTokenReplacer::class,
],
/*
* If the cache driver you configured supports tags, you may specify a tag name
* here. All responses will be tagged. When clearing the responsecache only
* items with that tag will be flushed.
*
* You may use a string or an array here.
*/
'cache_tag' => '',
/*
* This class is responsible for generating a hash for a request. This hash
* is used to look up an cached response.
*/
'hasher' => \Spatie\ResponseCache\Hasher\DefaultHasher::class,
/*
* This class is responsible for serializing responses.
*/
'serializer' => \Spatie\ResponseCache\Serializers\DefaultSerializer::class,
];
namespace App\Traits;
use Spatie\ResponseCache\Facades\ResponseCache;
trait ClearsResponseCache
{
public static function bootClearsResponseCache()
{
self::created(function () {
ResponseCache::clear();
});
self::updated(function () {
ResponseCache::clear();
});
self::deleted(function () {
ResponseCache::clear();
});
}
}
// Forget one
ResponseCache::forget('/some-uri');
// Forget several
ResponseCache::forget(['/some-uri', '/other-uri']);
// Equivalent to the example above
ResponseCache::forget('/some-uri', '/other-uri');
// forgetting all PUT responses of /some-uri
ResponseCache::selectCachedItems()->withPutMethod()->forUrls('/some-uri')->forget();
// forgetting all PUT responses of multiple endpoints
ResponseCache::selectCachedItems()->withPutMethod()->forUrls(['/some-uri','/other-uri'])->forget();
// this is equivalent to the example above
ResponseCache::selectCachedItems()->withPutMethod()->forUrls('/some-uri','/other-uri')->forget();
// forget /some-uri cached with "100" suffix (by default suffix is user->id or "")
ResponseCache::selectCachedItems()->usingSuffix('100')->forUrls('/some-uri')->forget();
// all options combined
ResponseCache::selectCachedItems()
->withPutMethod()
->withHeaders(['foo'=>'bar'])
->withCookies(['cookie1' => 'value'])
->withParameters(['param1' => 'value'])
->withRemoteAddress('127.0.0.1')
->usingSuffix('100')
->usingTags('tag1', 'tag2')
->forUrls('/some-uri', '/other-uri')
->forget();
class UserController extends Controller
{
public function __construct()
{
$this->middleware('doNotCacheResponse', ['only' => ['fooAction', 'barAction']]);
}
}
interface CacheProfile
{
/*
* Determine if the response cache middleware should be enabled.
*/
public function enabled(Request $request): bool;
/*
* Determine if the given request should be cached.
*/
public function shouldCacheRequest(Request $request): bool;
/*
* Determine if the given response should be cached.
*/
public function shouldCacheResponse(Response $response): bool;
/*
* Return the time when the cache must be invalidated.
*/
public function cacheRequestUntil(Request $request): DateTime;
/**
* Return a string to differentiate this request from others.
*
* For example: if you want a different cache per user you could return the id of
* the logged in user.
*
* @param \Illuminate\Http\Request $request
*
* @return mixed
*/
public function useCacheNameSuffix(Request $request);
}
// cache this route for 5 minutes
Route::get('/my-special-snowflake', 'SnowflakeController@index')->middleware('cacheResponse:300');
// cache all these routes for 10 minutes
Route::group(function() {
Route::get('/another-special-snowflake', 'AnotherSnowflakeController@index');
Route::get('/yet-another-special-snowflake', 'YetAnotherSnowflakeController@index');
})->middleware('cacheResponse:600');
// add a "foo" tag to this route with a 300 second lifetime
Route::get('/test1', 'SnowflakeController@index')->middleware('cacheResponse:300,foo');
// add a "bar" tag to this route
Route::get('/test2', 'SnowflakeController@index')->middleware('cacheResponse:bar');
// add both "foo" and "bar" tags to these routes
Route::group(function() {
Route::get('/test3', 'AnotherSnowflakeController@index');
Route::get('/test4', 'YetAnotherSnowflakeController@index');
})->middleware('cacheResponse:foo,bar');
ResponseCache::clear(['foo', 'bar']);
ResponseCache::clear(['bar']);
Cache::tags('special')->flush();
interface Replacer
{
/*
* Prepare the initial response before it gets cached.
*
* For example: replace a generated csrf_token by '<csrf-token-here>' that you can
* replace with its dynamic counterpart when the cached response is returned.
*/
public function prepareResponseToCache(Response $response): void;
/*
* Replace any data you want in the cached response before it gets
* sent to the browser.
*
* For example: replace '<csrf-token-here>' by a call to csrf_token()
*/
public function replaceInCachedResponse(Response $response): void;
}
namespace Spatie\ResponseCache\Serializers;
use Symfony\Component\HttpFoundation\Response;
interface Serializer
{
public function serialize(Response $response): string;
public function unserialize(string $serializedResponse): Response;
}