2016-05-22 17 views
5

Guzzle 6を使用していくつかのRESTクエリを実行しているページがありますが、問題なく動作することがあります。リモートAPIからの応答をキャッシュすると思われるguzzle-cache-middlewareがあることがわかりました。PHP:Guzzle 6 + Guzzle-cache-middleware

私はそれを動作させることはできませんしかし、私のコードは次のようなもの:私はエラーや警告を取得しないコードを実行した後

use GuzzleHttp\Client; 
use GuzzleHttp\HandlerStack; 
use League\Flysystem\Adapter\Local; 
use Kevinrob\GuzzleCache\CacheMiddleware; 
use Kevinrob\GuzzleCache\Strategy\PrivateCacheStrategy; 
use Kevinrob\GuzzleCache\Storage\FlysystemStorage; 

(...) 

$stack = HandlerStack::create(); 
$stack->push(
    new CacheMiddleware(
    new PrivateCacheStrategy(
     new FlysystemStorage(
     new Local("/tmp/sitex") 
    ) 
    ) 
), 
    "cache" 
); 


// Request 
$client = new Client([ 
    "handler" => $stack, 
    "base_uri" => "http://..., 
    "timeout" => 2.0, 
]); 

$response = $client->request("GET", "/posts", [ 
(...) 

を。口角はまだ私にAPIの応答を与えるが、何も新しい/tmp/sitexに表示されません。

レスポンスをキャッシュする要求の後に何か設定する必要はありますか?回答のTTLを設定するなどのオプションがありますか?

ドキュメントではこれについて説明していないので、Guzzleで経験した人が助けてくれればうれしいです。 :)

+0

use Kevinrob\GuzzleCache\Strategy\PrivateCacheStrategy;を置き換えます –

答えて

5

私は$stack->push(を置き換えることで、この問題を解決するために管理:

$stack->push(
     new CacheMiddleware(
     new GreedyCacheStrategy(
      new FlysystemStorage(
      new Local("/tmp/sitex") 
     ), 
      180 
     ) 
    ), 
     "cache" 
    ); 
  • GreedyCacheStrategy:常にそれがキャッシュ情報のヘッダーですチェックせずに応答をキャッシュ。
  • 180は、キャッシュを保存するTTLです。

また、私はPublicCacheStrategyを使用すると、それは適切なキャッシュ・ヘッダーを実装するキャッシュサーバの応答のためのより良いだということがわかりましたuse Kevinrob\GuzzleCache\Strategy\GreedyCacheStrategy;