106 lines
3.4 KiB
ReStructuredText
106 lines
3.4 KiB
ReStructuredText
@Cache
|
|
======
|
|
|
|
The ``@Cache`` annotation makes it easy to define HTTP caching headers for
|
|
expiration and validation.
|
|
|
|
HTTP Expiration Strategies
|
|
--------------------------
|
|
|
|
The ``@Cache`` annotation makes it easy to define HTTP caching::
|
|
|
|
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Cache;
|
|
|
|
/**
|
|
* @Cache(expires="tomorrow", public=true)
|
|
*/
|
|
public function indexAction()
|
|
{
|
|
}
|
|
|
|
You can also use the annotation on a class to define caching for all actions
|
|
of a controller::
|
|
|
|
/**
|
|
* @Cache(expires="tomorrow", public=true)
|
|
*/
|
|
class BlogController extends Controller
|
|
{
|
|
}
|
|
|
|
When there is a conflict between the class configuration and the method
|
|
configuration, the latter overrides the former::
|
|
|
|
/**
|
|
* @Cache(expires="tomorrow")
|
|
*/
|
|
class BlogController extends Controller
|
|
{
|
|
/**
|
|
* @Cache(expires="+2 days")
|
|
*/
|
|
public function indexAction()
|
|
{
|
|
}
|
|
}
|
|
|
|
.. note::
|
|
|
|
The ``expires`` attribute takes any valid date understood by the PHP
|
|
``strtotime()`` function.
|
|
|
|
HTTP Validation Strategies
|
|
--------------------------
|
|
|
|
The ``lastModified`` and ``ETag`` attributes manage the HTTP validation cache
|
|
headers. ``lastModified`` adds a ``Last-Modified`` header to Responses and
|
|
``ETag`` adds an ``ETag`` header.
|
|
|
|
Both automatically trigger the logic to return a 304 response when the
|
|
response is not modified (in this case, the controller is **not** called)::
|
|
|
|
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Cache;
|
|
|
|
/**
|
|
* @Cache(lastModified="post.getUpdatedAt()", ETag="'Post' ~ post.getId() ~ post.getUpdatedAt().getTimestamp()")
|
|
*/
|
|
public function indexAction(Post $post)
|
|
{
|
|
// your code
|
|
// won't be called in case of a 304
|
|
}
|
|
|
|
It's roughly doing the same as the following code::
|
|
|
|
public function myAction(Request $request, Post $post)
|
|
{
|
|
$response = new Response();
|
|
$response->setLastModified($post->getUpdatedAt());
|
|
if ($response->isNotModified($request)) {
|
|
return $response;
|
|
}
|
|
|
|
// your code
|
|
}
|
|
|
|
.. note::
|
|
|
|
The ETag HTTP header value is the result of the expression hashed with the
|
|
``sha256`` algorithm.
|
|
|
|
Attributes
|
|
----------
|
|
|
|
Here is a list of accepted attributes and their HTTP header equivalent:
|
|
|
|
======================================================================= ================================
|
|
Annotation Response Method
|
|
======================================================================= ================================
|
|
``@Cache(expires="tomorrow")`` ``$response->setExpires()``
|
|
``@Cache(smaxage="15")`` ``$response->setSharedMaxAge()``
|
|
``@Cache(maxage="15")`` ``$response->setMaxAge()``
|
|
``@Cache(vary={"Cookie"})`` ``$response->setVary()``
|
|
``@Cache(public=true)`` ``$response->setPublic()``
|
|
``@Cache(lastModified="post.getUpdatedAt()")`` ``$response->setLastModified()``
|
|
``@Cache(ETag="post.getId() ~ post.getUpdatedAt().getTimestamp()")`` ``$response->setETag()``
|
|
======================================================================= ================================
|