2

静的コンテンツをキャッシュしようとしています。このコンテンツの有効期間は 1 時間で、コンテンツは公開されています。これは誰にとっても同じです。

コントローラーに次のコードがあります。

$response = new Response();
$response->setPublic();
$response->setMaxAge(3600);
$response->setSharedMaxAge(3600);

if ($response->isNotModified($request)) {
   return $response;
}

return $this->render(
    'ThemesBundle:Ad:content.html.twig',
     array('context' => $context, 'block' => $block),
     $response
);

しかし、isNotModified()関数は常に false を返します。

PS: Symfony 2.0.22 を使用しています

4

1 に答える 1

2

間違えました。ETagまたはLast-Modifiedテストでキャッシュ検証$response->isNotModified($request)を使用する場合にのみ使用されます。

ここでは、有効期限メソッドを使用します ( Cache-ControlまたはExpiresを使用)。

したがって、これらの行を削除するだけです:

if ($response->isNotModified($request)) {
   return $response;
}

$response->setMaxAge(3600);(そしてsetSharedMaxAge)単独で仕事をします。何もテストする必要はありません。フレームワーク(またはクライアントナビゲーター)がそれを行います。

アクションを通過せずに 3600 秒間同じ応答が返されます。3600 秒後、ユーザーは新たにアクションを通過し、3600 秒間キャッシュされます。

さらに、読み取りを簡素化する@Cacheアノテーションを使用できます ;)

于 2013-06-14T11:39:59.830 に答える