@Cache
编辑本页@Cache
的@Cache
注释允许为过期和验证定义HTTP缓存头。
HTTP过期策略
的@Cache
注释允许定义HTTP缓存:
1 2 3 4 5 6 7 8
使用Sensio赞助\包\FrameworkExtraBundle\配置\缓存;/ * * *@Cache(expires="tomorrow", public=true) */公共函数指数(){}
1 2 3 4 5 6
使用Sensio赞助\包\FrameworkExtraBundle\配置\缓存;#[Cache(expires: 'tomorrow', public: true)]公共函数指数(){}
你也可以在类上使用注释来为控制器的所有动作定义缓存:
1 2 3 4 5 6
/ * * *@Cache(expires="tomorrow", public=true) */类BlogController扩展控制器{}
1 2 3 4
#[Cache(expires: 'tomorrow', public: true)]类BlogController扩展控制器{}
当类配置和方法配置之间存在冲突时,后者会覆盖前者:
12 3 4 5 6 7 8 9 10 11 12
/ * * *@Cache(到期= "明天")* /类BlogController扩展控制器{/ * * *@Cache(expires="+2天")*/公共函数指数(){}}
1 2 3 4 5 6 7 8
#(缓存(到期:“明天”))类BlogController扩展控制器{#[缓存(过期:'+2天')]公共函数指数(){}}
请注意
的到期
属性接受PHP可以理解的任何有效日期strtotime ()
函数。
HTTP验证策略
的lastModified
而且Etag
属性管理HTTP验证缓存头。lastModified
添加一个last - modified
头的响应和Etag
增加了一个Etag
头。
两者都自动触发逻辑,在响应未被修改时返回304响应(在本例中,控制器已被修改)不称):
1 2 3 4 5 6 7 8 9 10
使用Sensio赞助\包\FrameworkExtraBundle\配置\缓存;/ * * *@Cache(lastModified=" Post . getupdatedat ()", Etag="'Post' ~ Post . getid () ~ Post . getupdatedat ().getTimestamp()") */公共函数指数(文章$帖子){//你的代码//在304的情况下不会被调用}
1 2 3 4 5 6 7 8
使用Sensio赞助\包\FrameworkExtraBundle\配置\缓存;#[Cache(lastModified: 'Post . getupdatedat ()', etag: "'Post' ~ Post . getid () ~ Post . getupdatedat ().getTimestamp()")]公共函数指数(文章$帖子){//你的代码//在304的情况下不会被调用}
它与下面的代码大致相同:
1 2 3 4 5 6 7 8 9 10
公共函数我的(请求$请求,后$帖子){$响应=新反应();$响应->setLastModified ($帖子->getUpdatedAt ());如果($响应->isNotModified ($请求)) {返回$响应;}//你的代码}
请注意
的散列表达式的结果是Etag HTTP头值sha256
算法。
属性
下面是接受的属性和它们的HTTP头对等物的列表:
注释 | 反应方法 |
---|---|
@Cache(到期=“明天”) |
反应- > setExpires () |
@Cache (smaxage = 15) |
反应- > setSharedMaxAge () |
@Cache (maxage = 15) |
反应- > setMaxAge () |
@Cache (maxstale = 15) |
反应- >标题- > addCacheControlDirective (max-stale, 15) |
@Cache (staleWhileRevalidate = 15) |
反应- >标题- > addCacheControlDirective (stale-while-revalidate, 15) |
@Cache (staleIfError = 15) |
反应- >标题- > addCacheControlDirective (stale-if-error, 15) |
@Cache(不同={“饼干”}) |
反应- > setVary () |
@Cache(公共= true) |
反应- > setPublic () |
@Cache (lastModified = " post.getUpdatedAt()”) |
反应- > setLastModified () |
@Cache(Etag="post.getId() ~ post.getUpdatedAt().getTimestamp()") |
反应- > setEtag () |
@Cache (mustRevalidate = true) |
反应- >标题- > addCacheControlDirective(“must-revalidate”) |
请注意
smaxage
,maxage
而且maxstale
属性还可以获得具有相对时间格式的字符串(1天
,2周
,……)。
此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。