PHP code example of iqbalmalik89 / guzzle-application-cache-subscriber
1. Go to this page and download the library: Download iqbalmalik89/guzzle-application-cache-subscriber 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/ */
iqbalmalik89 / guzzle-application-cache-subscriber example snippets
$cache = new CacheStorage(new ArrayCache());
$sub = new ApplicationCacheSubscriber($cache);
$client = new Client();
$client->getEmitter()->attach($sub);
$num = 5;
$url = "http://www.example.com/";
for ($i = 1; $i <= $num; $i++) {
echo "Making $i. request:\n";
$resp = $client->get($url, ["debug" => true]);
echo "Status code of $i. request: ".$resp->getStatusCode()."\n";
}
$cache = new CacheStorage(new ArrayCache());
/**
* Just some functions / closures for convenience
*/
$getConfigKeyValue = function (AbstractRequestEvent $e, $configKey){
$request = $e->getRequest();
return $request->getConfig()->get($configKey);
};
$setConfigKeyValue = function (AbstractRequestEvent $e, $configKey){
$request = $e->getRequest();
return $request->getConfig()->set($configKey, true);
};
/**
* Setup the closures
*/
$mustRequestFreshKey = "requestFresh";
$mustRequestFresh = function(BeforeEvent $event) use ($mustRequestFreshKey, $getConfigKeyValue){
$val = $getConfigKeyValue($event,$mustRequestFreshKey);
if($val === null){
return false;
}
if($val){
echo "Making a fresh request.\n";
return true;
}else{
echo "Trying to serve the response from cache.\n";
return false;
}
};
$canCacheRequestKey = "canCacheRequest";
$canCacheRequest = function(EndEvent $event) use ($canCacheRequestKey, $getConfigKeyValue){
$val = $getConfigKeyValue($event,$canCacheRequestKey);
if($val === null){
return true;
}
if($val){
echo "Caching the request/response.\n";
return true;
}else{
echo "Not allowed to cache the request/response.\n";
return false;
}
};
$sub = new ApplicationCacheSubscriber($cache, $canCacheRequest, $mustRequestFresh);
$client = new Client();
$client->getEmitter()->attach($sub);
$url = "http://www.example.com/";
$requests = [];
//First request, caching is allowed
$r = $client->createRequest("GET",$url);
$r->getConfig()->add($canCacheRequestKey,true);
$requests[] = $r;
//Second request, get from cache
$r = $client->createRequest("GET",$url);
$r->getConfig()->add($mustRequestFreshKey,false);
$requests[] = $r;
//Third request, force fresh and disallow caching
$r = $client->createRequest("GET",$url);
$r->getConfig()->add($mustRequestFreshKey,true);
$r->getConfig()->add($canCacheRequestKey,false);
$requests[] = $r;
//Fourth request, try to serve from cache and allow caching
$r = $client->createRequest("GET",$url);
$r->getConfig()->add($mustRequestFreshKey,false);
$requests[] = $r;
//Fifth request, get it again from cache
$r = $client->createRequest("GET",$url);
$r->getConfig()->add($mustRequestFreshKey,false);
$requests[] = $r;
foreach ($requests as $i => $request) {
echo "Request $i\n";
$resp = $client->send($request);
if($request->getConfig()->get(ApplicationCacheSubscriber::CACHED_RESPONSE_KEY)) {
echo "The response came from cache\n\n";
}else{
echo "The response came not from cache\n\n";
}
}