Kevinrob\GuzzleCache\Strategy\PrivateCacheStrategy::fetch PHP Method

fetch() public method

Return a CacheEntry or null if no cache.
public fetch ( Psr\Http\Message\RequestInterface $request ) : CacheEntry | null
$request Psr\Http\Message\RequestInterface
return Kevinrob\GuzzleCache\CacheEntry | null
    public function fetch(RequestInterface $request)
    {
        /** @var int|null $maxAge */
        $maxAge = null;
        if ($request->hasHeader('Cache-Control')) {
            $reqCacheControl = new KeyValueHttpHeader($request->getHeader('Cache-Control'));
            if ($reqCacheControl->has('no-cache')) {
                // Can't return cache
                return null;
            }
            $maxAge = $reqCacheControl->get('max-age', null);
        } elseif ($request->hasHeader('Pragma')) {
            $pragma = new KeyValueHttpHeader($request->getHeader('Pragma'));
            if ($pragma->has('no-cache')) {
                // Can't return cache
                return null;
            }
        }
        $cache = $this->storage->fetch($this->getCacheKey($request));
        if ($cache !== null) {
            if ((string) $cache->getOriginalRequest()->getUri() !== (string) $request->getUri()) {
                return null;
            }
            if ($maxAge !== null) {
                if ($cache->getAge() > $maxAge) {
                    // Cache entry is too old for the request requirements!
                    return null;
                }
            }
            if (!$cache->isVaryEquals($request)) {
                return null;
            }
        }
        return $cache;
    }

Usage Example

 public function testCacheProvider()
 {
     $TMP_DIR = __DIR__ . '/tmp/';
     $cacheProviders = [new DoctrineCacheStorage(new ArrayCache()), new DoctrineCacheStorage(new ChainCache([new ArrayCache()])), new DoctrineCacheStorage(new FilesystemCache($TMP_DIR)), new DoctrineCacheStorage(new PhpFileCache($TMP_DIR)), new FlysystemStorage(new Local($TMP_DIR))];
     $request = new Request('GET', 'test.local');
     $response = new Response(200, ['Cache-Control' => 'max-age=60'], 'Test content');
     /** @var CacheProvider $cacheProvider */
     foreach ($cacheProviders as $cacheProvider) {
         $this->rrmdir($TMP_DIR);
         $cache = new PrivateCacheStrategy($cacheProvider);
         $cache->cache($request, $response);
         $entry = $cache->fetch($request);
         $this->assertNotNull($entry);
         $this->assertEquals((string) $response->getBody(), (string) $entry->getResponse()->getBody());
     }
     $this->rrmdir($TMP_DIR);
 }