HttpFoundation组件
编辑该页面警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 2.4,不再维护。
读这个页面的更新版本Symfob娱乐下载ony 6.2(当前的稳定版本)。
HttpFoundation组件
HttpFoundation组件为HTTP规范定义了一种面向对象的层。
在PHP中,请求是由一些全局变量($ _GET
,$ _POST
,带有_file美元
,_COOKIE美元
,_SESSION美元
,…)和一些函数生成的响应(回声
,头
,setcookie
,……)。
Symfob娱乐下载ony HttpFoundation组件替换这些默认PHP全局变量和函数的一种面向对象的层。
安装
您可以安装组件在两个不同的方面:
- 安装它通过作曲家(
ob娱乐下载symfony / http-foundation
在Packagist); - 使用官方的Git存储库(https://github.com/ob娱乐下载symfony/HttpFoundation)。
请求
最常见的方式来创建一个请求是它基于当前的PHP全局变量createFromGlobals ():
1 2 3
使用ob娱乐下载\组件\HttpFoundation\请求;美元请求=请求::createFromGlobals ();
这几乎等同于更详细的,但也更灵活,__construct ()电话:
1 2 3 4 5 6 7 8
美元请求=新请求(美元_GET,美元_POST,数组(),美元_COOKIE,美元带有_file,美元_SERVER);
访问请求数据
一个请求对象持有客户端请求的信息。这些信息可以通过访问几个公共属性:
请求
:相当于$ _POST
;查询
:相当于$ _GET
(请求- >查询- >获取美元(“名字”)
);饼干
:相当于_COOKIE美元
;属性
:不等效,所使用的应用程序来存储其他数据(见下面);文件
:相当于带有_file美元
;服务器
:相当于$ _SERVER
;头
:主要是相当于一个子集$ _SERVER
(请求- >标题- >获取美元(“用户代理”)
)。
每个属性都是一个ParameterBag(或者一个子类的实例),这是一个数据夹类:
请求
:ParameterBag;查询
:ParameterBag;饼干
:ParameterBag;属性
:ParameterBag;文件
:FileBag;服务器
:ServerBag;头
:HeaderBag。
所有ParameterBag实例方法来检索和更新它的数据:
- 所有():返回的参数;
- 键():返回参数键;
- 替换():由一组新的替换当前的参数;
- add ():添加参数;
- get ():返回一个参数的名字;
- 设置():设置一个参数的名字;
- 有():返回
真正的
如果参数定义; - remove ():删除一个参数。
的ParameterBag实例也有一些方法来过滤输入值:
- getAlpha ():返回参数的字母字符值;
- getAlnum ():返回字母字符和数字的参数值;
- getDigits ():返回参数的数字值;
- getInt ():返回参数值转换为整数;
- filter ()通过使用PHP:过滤器的参数使用filter_var函数。
所有getter方法有三个参数:第一个是参数名和第二个是默认值返回,如果参数不存在:
1 2 3 4 5 6 7 8 9 10
/ /查询字符串是“? foo = bar”美元请求- >查询- >get (“foo”);/ /返回酒吧美元请求- >查询- >get (“酒吧”);/ /返回null美元请求- >查询- >get (“酒吧”,“酒吧”);/ /返回“酒吧”
当PHP进口请求查询,它处理请求参数foo(酒吧)=酒吧
在一种特殊的方式创建一个数组。所以你可以得到喷火
参数,你将返回一个数组酒吧
元素。但有时,你可能想要得到的值“原始”参数名称:foo(酒吧)
。这是可能的ParameterBag
getter像get ()通过第三个参数:
1 2 3 4 5 6 7 8 9 10
/ /查询字符串是“? foo(酒吧)= bar”美元请求- >查询- >get (“foo”);/ /返回数组('酒吧' = > '酒吧')美元请求- >查询- >get (“foo(酒吧)”);/ /返回null美元请求- >查询- >get (“foo(酒吧)”,零,真正的);/ /返回“酒吧”
由于公共属性
财产,你可以额外的数据存储在请求,也是的一个实例ParameterBag。这主要是用于附加信息,属于请求,需要在应用程序中从许多不同的访问点。信息在Symfony框架,这是如何使用ob娱乐下载Symfob娱乐下载ony的书。
最后,原始数据发送请求主体可以访问使用getContent ():
1
美元内容=美元请求- >getContent ();
举例来说,这可能是有用的过程一个JSON字符串发送到应用程序的远程服务使用HTTP POST方法。
识别一个请求
在您的应用程序,您需要一种方法来确定一个请求;大多数时候,这是通过请求的路径信息”,可以通过访问getPathInfo ()方法:
1 2 3
/ /请求到http://example.com/blog/index.php/post/hello-world/ /路径信息是“/ post / hello world”美元请求- >getPathInfo ();
模拟一个请求
而不是创建一个请求基于PHP的全局变量,你也可以模拟一个请求:
1 2 3 4 5
美元请求=请求::创建(' / hello world ',“得到”,数组(“名字”= >“法”));
的create ()方法基于一个URI创建一个请求,一个方法和一些参数(查询参数或根据HTTP请求的方法);当然,你也可以覆盖所有其他变量(默认情况下,Symfony创建合理的默认值为所有PHP全局变量)。ob娱乐下载
基于这样的要求,你可以通过覆盖全球的PHP变量overrideGlobals ():
1
美元请求- >overrideGlobals ();
访问会话
如果你有一个会话请求,您可以通过访问它getSession ()方法;的hasPreviousSession ()方法告诉你如果请求包含一个会话开始在前面的请求。
访问“接受- *”标题数据
你可以很容易地访问基本数据提取接受- *
头用以下方法:
- getAcceptableContentTypes ():返回接受内容类型的列表命令下行质量;
- getLanguages ():返回的列表接受语言下令下行质量;
- getCharsets ():返回列表接受数据集下令下行质量;
getEncodings ():返回列表接受数据集下令下行质量;
2.4
的
getEncodings ()
方法是在Symfony 2.4中引入的。ob娱乐下载
2.2
的AcceptHeader类是在Symfony 2.2中引入的。ob娱乐下载
如果你需要完全访问解析数据接受
,接收语言
,Accept-Charset
或接受编码
,你可以使用AcceptHeader工具类:
1 2 3 4 5 6 7 8 9 10 11 12
使用ob娱乐下载\组件\HttpFoundation\AcceptHeader;美元接受= AcceptHeader::fromString (美元请求- >头- >get (“接受”));如果(美元接受- >有(“text / html”)){美元项=美元接受- >get (“text / html”);美元字符集=美元项- >getAttribute (“字符集”,“utf - 8”);美元质量=美元项- >getQuality ();}/ / Accept标头项质量按降序排序美元接受= AcceptHeader::fromString (美元请求- >头- >get (“接受”))- >所有();
压倒一切的请求
2.4
的setFactory ()方法是在Symfony 2.4中引入的。ob娱乐下载
的请求
类不应该覆盖,因为它是一个数据对象,它是一个HTTP消息。但从遗留系统时,添加方法或修改一些默认的行为可能会有帮助。在这种情况下,注册一个PHP调用创建的实例请求
类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21日22日23日
使用ob娱乐下载\组件\HttpFoundation\请求;请求::setFactory (函数(数组美元查询=数组()数组,美元请求=数组()数组,美元属性=数组()数组,美元饼干=数组()数组,美元文件=数组()数组,美元服务器=数组(),美元内容= null){返回SpecialRequest::创建(美元查询,美元请求,美元属性,美元饼干,美元文件,美元服务器,美元内容);});美元请求=请求::createFromGlobals ();
响应
一个响应对象持有的所有信息需要从给定请求发送回客户机。构造函数接受三个参数:响应内容,状态代码,和HTTP头的数组:
1 2 3 4 5 6 7
使用ob娱乐下载\组件\HttpFoundation\响应;美元响应=新响应(“内容”、响应::并,数组(“内容类型”= >“text / html”));
2.4
支持HTTP状态代码常数是在Symfony 2.4中引入的。ob娱乐下载
这些信息也可以操纵响应对象创建后:
1 2 3 4 5 6
美元响应- >setContent (“Hello World”);/ / ResponseHeaderBag头公共属性美元响应- >头- >集(“内容类型”,“文本/普通”);美元响应- >setStatusCode(响应::HTTP_NOT_FOUND);
当设置内容类型
的反应,你可以设置字符集,但最好是通过setCharset ()方法:
1
美元响应- >setCharset (“iso - 8859 - 1”);
注意,默认情况下,Symfony假定你的反应ob娱乐下载是用utf - 8编码。
发送响应
在发送响应之前,您可以确保它符合HTTP规范通过调用准备()方法:
1
美元响应- >准备(美元请求);
然后发送响应给客户端调用一样简单send ():
1
美元响应- >send ();
设置cookie
响应可以通过操纵饼干头
公共属性:
1 2 3
使用ob娱乐下载\组件\HttpFoundation\饼干;美元响应- >头- >setCookie (新饼干(“foo”,“酒吧”));
的setCookie ()方法取的一个实例饼干作为参数。
你可以明确一个cookie通过clearCookie ()方法。
管理HTTP缓存
的响应类具有一组功能丰富的方法来操作相关的HTTP头信息缓存:
- setPublic ();
- setPrivate ();
- (到期);
- setExpires ();
- setMaxAge ();
- setSharedMaxAge ();
- setTtl ();
- setClientTtl ();
- setLastModified ();
- setEtag ();
- setVary ();
的setCache ()方法可用于设置最常用的一个方法调用的缓存信息:
1 2 3 4 5 6 7 8
美元响应- >setCache (数组(“etag”= >“六边形abcdef”,“last_modified”= >新\ DateTime (),“max_age”= >600年,“s_maxage”= >600年,“私人”= >假,“公共”= >真正的));
检查如果响应验证器(ETag
,last - modified
)匹配客户机请求中指定一个条件值,使用isNotModified ()方法:
1 2 3
如果(美元响应- >isNotModified (美元请求)){美元响应- >send ();}
如果响应不修改,设置状态代码304,删除实际的响应内容。
重定向用户
重定向客户端到另一个URL,您可以使用RedirectResponse类:
1 2 3
使用ob娱乐下载\组件\HttpFoundation\RedirectResponse;美元响应=新RedirectResponse (“http://example.com/”);
流媒体的回应
的StreamedResponse类允许您流回客户机的响应。响应内容由PHP调用而不是一个字符串:
1 2 3 4 5 6 7 8 9 10 11
使用ob娱乐下载\组件\HttpFoundation\StreamedResponse;美元响应=新StreamedResponse ();美元响应- >setCallback (函数(){回声“Hello World”;冲洗();睡眠(2);回声“Hello World”;冲洗();});美元响应- >send ();
请注意
的冲洗()
函数不冲洗缓冲。如果ob_start ()
或者是之前被称为output_buffering
php . ini
选择启用,您必须调用ob_flush ()
之前冲洗()
。
另外,PHP并不是唯一的层,可以缓冲输出。您的web服务器也可能根据其配置缓冲。甚至更多,如果你使用fastcgi,缓冲不能被禁用。
服务文件
发送一个文件时,您必须添加一个附加项
头给你回应。在创建这个头基本文件下载很简单,使用非ascii文件名是更多的涉及。的makeDisposition ()摘要背后的辛勤工作一个简单的API:
1 2 3 4 5 6 7 8
使用ob娱乐下载\组件\HttpFoundation\ResponseHeaderBag;美元d=美元响应- >头- >makeDisposition (ResponseHeaderBag::DISPOSITION_ATTACHMENT,“foo.pdf”);美元响应- >头- >集(“附加”,美元d);
2.2
的BinaryFileResponse类是在Symfony 2.2中引入的。ob娱乐下载
或者,如果你是为一个静态文件,您可以使用一个BinaryFileResponse:
1 2 3 4
使用ob娱乐下载\组件\HttpFoundation\BinaryFileResponse;美元文件=“路径/ / file.txt”;美元响应=新BinaryFileResponse (美元文件);
的BinaryFileResponse
会自动处理范围
和If-Range
头从请求。它还支持X-Sendfile
(见Nginx和Apache)。使用它,您需要确定是否X-Sendfile-Type
头应该信任和电话trustXSendfileTypeHeader ()如果它应该:
1
BinaryFileResponse::trustXSendfileTypeHeader ();
你仍然可以设置内容类型
发送的文件,或改变它附加项
:
1 2 3 4 5
美元响应- >头- >集(“内容类型”,“文本/普通”);美元响应- >setContentDisposition (ResponseHeaderBag::DISPOSITION_ATTACHMENT,“filename.txt”);
创建一个JSON响应
可以通过创建任何类型的反应响应类通过设置正确的内容和标题。一个JSON响应可能会看起来像这样:
1 2 3 4 5 6 7
使用ob娱乐下载\组件\HttpFoundation\响应;美元响应=新反应();美元响应- >setContent (json_encode (数组(“数据”= >123年)));美元响应- >头- >集(“内容类型”,“application / json”);
也有帮助JsonResponse类,它可以使这更容易:
1 2 3 4 5 6
使用ob娱乐下载\组件\HttpFoundation\JsonResponse;美元响应=新JsonResponse ();美元响应- >setData (数组(“数据”= >123年));
这个编码你的JSON数组的数据和设置内容类型
头来application / json
。
JSONP回调
如果你使用JSONP,你可以设置回调函数,数据应该传递给:
1
美元响应- >setCallback (“handleResponse”);
在这种情况下,内容类型
头会text / javascript
和响应内容是这样的:
1
handleResponse ({“数据”:123年});