HttpKernel组件:HttpKernelInterface
编辑该页面警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 5.0,不再维护。
读这个页面的更新版本Symfob娱乐下载ony 6.3(当前的稳定版本)。
HttpKernel组件:HttpKernelInterface
在这本书的第二章的结论,我讲过的一个重大好处使用Symfony的组件:ob娱乐下载互操作性所有的框架和应用程序之间使用它们。让我们做一个大步朝着这一目标通过我们的框架实现HttpKernelInterface
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
名称空间ob娱乐下载\组件\HttpKernel;/ /……接口HttpKernelInterface{/ * * *@return响应响应实例* /公共函数处理(请求美元请求,美元类型= self:: MASTER_REQUEST,美元抓= true);}
HttpKernelInterface
可能是最重要的代码HttpKernel组件,没有开玩笑。框架和应用程序实现该接口是完全的互操作性。此外,很多优秀的特征将会免费。
更新你的框架,这样就实现了这个接口:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
/ / example.com/src/Framework.php/ /……使用ob娱乐下载\组件\HttpKernel\HttpKernelInterface;类框架实现了HttpKernelInterface{/ /……公共函数处理(请求美元请求,美元类型= HttpKernelInterface:: MASTER_REQUEST,美元抓= true){/ /……}}
即使这种变化看起来不是太复杂,它给我们带来了很多!让我们谈论的一个最令人印象深刻的:透明HTTP缓存支持。
的HttpCache
类实现一个有很多特色的反向代理,用PHP编写的;它实现了HttpKernelInterface
和包装另一个HttpKernelInterface
实例:
1 2 3 4 5 6 7 8 9 10 11 12
/ / example.com/web/front.php/ /……使用ob娱乐下载\组件\HttpKernel;美元框架=新单纯形\框架(美元调度程序,美元匹配器,美元controllerResolver,美元argumentResolver);美元框架=新HttpKernel \ HttpCache \ HttpCache (美元框架,新HttpKernel \ HttpCache \存储(__DIR__。“/ . . /缓存”));美元框架- >处理(美元请求)- >send ();
这些都是需要添加HTTP缓存支持我们的框架。这难道不神奇吗?
需要做配置缓存通过HTTP缓存头。例如,缓存响应10秒钟,使用回应::setTtl ()
方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
/ / example.com/src/Calendar/Controller/LeapYearController.php/ /……公共函数指数(请求美元请求,美元一年){美元leapYear=新LeapYear ();如果(美元leapYear- >isLeapYear (美元一年)){美元响应=新响应(“是的,这是一个闰年!”);}其他的{美元响应=新响应(“不,这不是一个闰年。);}美元响应- >setTtl (10);返回美元响应;}
提示
如果你从命令行运行框架通过模拟请求(要求::创建(/ is_leap_year / 2012)
),您可以调试反应实例通过倾销他们的字符串表示echo $响应;
),它会显示所有标题以及内容的响应。
验证工作正常,添加一个随机数来响应内容和检查只改变每10秒数:
1
美元响应=新响应(“是的,这是一个闰年!”.rand ());
请注意
在部署到生产环境时,请使用Symfony的反向代理(对共享主机)或更好的是,切换到一个更高效的反向代理ob娱乐下载清漆。
使用HTTP缓存头来管理你的应用程序缓存是非常强大的,允许您调整细缓存策略可以使用过期和HTTP规范的验证模型。如果你不熟悉这些概念,阅读HTTP缓存章Symfony的文档。欧宝官网下载appob娱乐下载
响应类包含的方法,让您可以配置HTTP缓存。其中一个最强大的setCache ()
因为它抽象最常用的缓存策略到一个数组:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
美元日期= date_create_from_format (Y-m-d H:我:年代”,“2005-10-15 10:00:00);美元响应- >setCache ([“公共”= >真正的,“etag”= >”中的“,“last_modified”= >美元日期,“max_age”= >10,“s_maxage”= >10]);/ /这是相当于以下代码美元响应- >setPublic ();美元响应- >setEtag (”中的“);美元响应- >setLastModified (美元日期);美元响应- >setMaxAge (10);美元响应- >setSharedMaxAge (10);
当使用验证模型isNotModified ()
方法允许您在响应时间减少短路尽早反应生成:
1 2 3 4 5 6 7 8 9
美元响应- >setETag (“whatever_you_compute_as_an_etag”);如果(美元响应- >isNotModified (美元请求)){返回美元响应;}美元响应- >setContent (“响应的计算内容”);返回美元响应;
使用HTTP缓存是伟大的,但是如果你不能缓存整个页面呢?如果你可以缓存但一些栏,一切都更有活力,其余的内容?边端包括(应急服务国际公司)救援!而不是生成整个内容,应急服务国际公司允许你马克一个地区一个页面是sub-request调用的内容:
1 2 3 4 5
这是页面的内容2012年是闰年吗?< esi:包括src = " / leapyear / 2012 " / >其他一些内容
ESI HttpCache支持的标记,你需要通过它的一个实例应急服务国际公司
类。的应急服务国际公司
类自动解析ESI标签和让子请求,将它们转换为适当的内容:
1 2 3 4 5
美元框架=新HttpKernel \ HttpCache \ HttpCache (美元框架,新HttpKernel \ HttpCache \存储(__DIR__。“/ . . /缓存”),新HttpKernel \ HttpCache \ Esi ());
请注意
应急服务国际公司工作,您需要使用一个反向代理,支持像Symfony的实现。ob娱乐下载清漆是最好的选择,它是开源的。
当使用复杂的HTTP缓存策略和/或许多ESI包括标签,很难理解为什么当资源应该被缓存。易于调试,您可以启用调试模式:
1 2 3 4 5 6
美元框架=新HttpKernel \ HttpCache \ HttpCache (美元框架,新HttpKernel \ HttpCache \存储(__DIR__。“/ . . /缓存”),新HttpKernel \ HttpCache \ Esi (), (“调试”= >真正的]);
添加一个调试模式X-ob娱乐下载Symfony-Cache
头到每个响应描述缓存层做了什么:
1 2 3
X-ob娱乐下载Symfony-Cache: / is_leap_year / 2012:过期,无效的,商店X-Symfony-Cache: / is_leap_year / 2012:新鲜
HttpCache有很多特性,比如支持stale-while-revalidate
和stale-if-error
HTTP cache - control扩展在RFC 5861中定义的。
的一个界面,我们的框架现在可以受益于许多功能构建到HttpKernel组件;HTTP缓存只是其中之一但是很重要,因为它可以让你的应用程序飞!