PHP code example of imagina / laravel-responsecache
1. Go to this page and download the library: Download imagina/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/ */
imagina / 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,
/*
* 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'),
/*
* 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 serializes cache data and expands it.
* Serialization can save the data to be returned in an appropriate form.
*/
'serializer' => \Spatie\ResponseCache\Serializer\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 URI
ResponseCache::forget('/some-uri');
// Forget several URIs
ResponseCache::forget(['/some-uri', '/other-uri']);
// Alternatively
ResponseCache::forget('/some-uri', '/other-uri');
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
{
/*
* Transform 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 transformInitialResponse(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 replaceCachedResponse(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;
}