HttpFoundation组件
编辑本页警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 2.1,现已不再维护。
读本页的更新版本用于Syob娱乐下载mfony 6.2(当前稳定版本)。
HttpFoundation组件
HttpFoundation组件为HTTP规范定义了一个面向对象的层。
在PHP中,请求由一些全局变量表示($ _GET
,$ _POST
,带有_file美元
,_COOKIE美元
,_SESSION美元
,…),响应由一些函数(回声
,头
,setcookie
,……)。
Symfob娱乐下载ony2 HttpFoundation组件将这些默认的PHP全局变量和函数替换为面向对象层。
安装
你可以用两种不同的方式安装组件:
- 使用官方Git存储库(https://github.com/ob娱乐下载symfony/HttpFoundation);
- 通过Composer安装(
ob娱乐下载symfony / http-foundation
在Packagist).
请求
创建请求的最常用方法是基于当前的PHP全局变量createFromGlobals ():
1 2 3
使用ob娱乐下载\组件\HttpFoundation\请求;$请求=请求::createFromGlobals ();
这几乎等同于更啰嗦,但也更灵活,__construct ()电话:
1 2 3 4 5 6 7 8
$请求=新请求($_GET,$_POST,数组(),$_COOKIE,$带有_file,$_SERVER);
访问请求数据
Request对象保存有关客户端请求的信息。这些信息可以通过几个公共属性访问:
请求
:等于$ _POST
;查询
:等于$ _GET
(请求- >查询- >获取美元(“名字”)
);饼干
:等于_COOKIE美元
;属性
:没有等价物-被你的应用程序用来存储其他数据(见下面)文件
:等于带有_file美元
;服务器
:等于$ _SERVER
;头
的一个子集$ _SERVER
(请求- >标题- >获取美元(“用户代理”)
).
每个属性都是ParameterBag实例(或的子类),它是一个数据持有者类:
请求
:ParameterBag;查询
:ParameterBag;饼干
:ParameterBag;属性
:ParameterBag;文件
:FileBag;服务器
:ServerBag;头
:HeaderBag.
所有ParameterBag实例有方法来检索和更新它的数据:
- 所有():返回参数;
- 键():返回参数键;
- 替换():用新的参数集替换当前参数;
- add ():添加参数;
- get ():按名称返回参数;
- 设置():按名称设置参数;
- 有():如果定义了参数则返回true;
- remove ():移除参数。
的ParameterBagInstance也有一些过滤输入值的方法:
- getAlpha ():返回参数值的字母字符;
- getAlnum ():返回参数值的字母和数字;
- getDigits ():返回参数值的数字;
- getInt ():返回转换为整数的参数值;
- filter ():使用PHP对参数进行过滤使用filter_var函数。
所有getters最多有三个参数:第一个是参数名,第二个是参数不存在时返回的默认值:
1 2 3 4 5 6 7 8 9 10
//查询字符串为'?foo =酒吧'$请求->查询->get (“foo”);//返回$请求->查询->get (“酒吧”);//返回null$请求->查询->get (“酒吧”,“酒吧”);//返回'bar'
当PHP导入请求查询时,它处理如下请求参数foo(酒吧)=酒吧
以一种特殊的方式创建数组。所以你可以得到喷火
参数,你会得到一个数组酒吧
元素。但有时,你可能想获取“原始”参数名的值:foo(酒吧)
.这是可能的ParameterBag
getter像get ()通过第三个论证:
1 2 3 4 5 6 7 8 9 10
//查询字符串为'?foo(酒吧)=酒吧'$请求->查询->get (“foo”);//返回数组('bar' => 'bar')$请求->查询->get (“foo(酒吧)”);//返回null$请求->查询->get (“foo(酒吧)”,零,真正的);//返回'bar'
最后,您还可以在请求中存储其他数据,这要感谢public属性
属性的一个实例ParameterBag.这主要用于附加属于请求的信息,并且需要从应用程序中的许多不同点访问这些信息。有关如何在Symfony2框架中使用它的信息,请参见ob娱乐下载Symfob娱乐下载ony2的书.
识别请求
在您的应用程序中,您需要一种方法来识别请求;大多数情况下,这是通过请求的“路径信息”来完成的,可以通过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 ()method根据URI、方法和一些参数(查询参数或请求参数取决于HTTP方法)创建一个请求;当然,您也可以覆盖所有其他变量(默认情况下,Symfony为所有PHP全局变量创建合理的默认值)。ob娱乐下载
基于这样的请求,您可以通过重写PHP全局变量overrideGlobals ():
1
$请求->overrideGlobals ();
访问会话
方法将会话附加到请求,则可以通过getSession ()方法;的hasPreviousSession ()方法告诉您请求是否包含在以前的一个请求中启动的会话。
访问' Accept-* '头数据
您可以轻松地访问提取的基本数据接受- *
头文件,使用以下方法:
- getAcceptableContentTypes ():返回按质量降序排列的可接受内容类型列表;
- getLanguages ():返回按质量降序排列的可接受语言列表;
- getCharsets ():返回按质量降序排列的可接受字符集列表。
响应
一个响应对象保存了需要从给定请求发送回客户机的所有信息。构造函数最多接受三个参数:响应内容、状态代码和HTTP报头数组:
1 2 3 4 5 6 7
使用ob娱乐下载\组件\HttpFoundation\响应;$响应=新响应(“内容”,200,数组(“内容类型”= >“text / html”));
这些信息也可以在Response对象创建后进行操作:
1 2 3 4 5 6
$响应->setContent (“Hello World”);// headers公共属性是一个ResponseHeaderBag$响应->头->集(“内容类型”,“文本/普通”);$响应->setStatusCode (404);
当设置内容类型
,您可以设置字符集,但最好通过setCharset ()方法:
1
$响应->setCharset (“iso - 8859 - 1”);
请注意,默认情况下,Symfony假设您的响ob娱乐下载应是用UTF-8编码的。
设置cookie
方法可以对响应cookie进行操作头
公共属性:
1 2 3
使用ob娱乐下载\组件\HttpFoundation\饼干;$响应->头->setCookie (新饼干(“foo”,“酒吧”));
的setCookie ()方法的实例饼干作为一个论证。
您可以通过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 ();}
如果没有修改Response,它将状态代码设置为304并删除实际的响应内容。
重定向用户
要将客户端重定向到另一个URL,可以使用RedirectResponse类:
1 2 3
使用ob娱乐下载\组件\HttpFoundation\RedirectResponse;$响应=新RedirectResponse (“http://example.com/”);
流媒体响应
2.1
Symfony 2.1中增加了对流响应的支持。ob娱乐下载
的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,缓冲根本不能被禁用。
下载文件
2.1
的makeDisposition
方法是在Symfony 2.1中添加的。ob娱乐下载
上传文件时,必须添加附加项
标题到您的响应。虽然为基本文件下载创建这个头文件很容易,但使用非ascii文件名就比较麻烦了。的makeDisposition ()抽象了一个简单API背后的艰苦工作:
1 2 3 4 5
使用ob娱乐下载\组件\HttpFoundation\ResponseHeaderBag;$d=$响应->头->makeDisposition (ResponseHeaderBag::DISPOSITION_ATTACHMENT,“foo.pdf”);$响应->头->集(“附加”,$d);
创建JSON响应
方法可以创建任何类型的响应响应通过设置正确的内容和标头来初始化。JSON响应可能是这样的:
1 2 3 4 5 6 7
使用ob娱乐下载\组件\HttpFoundation\响应;$响应=新反应();$响应->setContent (json_encode (数组(“数据”= >123)));$响应->头->集(“内容类型”,“application / json”);
2.1
的JsonResponse类是在Symfony 2.1中添加的。ob娱乐下载
还有一个有用的JsonResponse类,这可以使这更容易:
1 2 3 4 5 6
使用ob娱乐下载\组件\HttpFoundation\JsonResponse;$响应=新JsonResponse ();$响应->setData (数组(“数据”= >123));
这将把数据数组编码为JSON并设置内容类型
头来application / json
.
JSONP回调
如果你正在使用JSONP,你可以设置数据应该传递给的回调函数:
1
$响应->setCallback (“handleResponse”);
在这种情况下,内容类型
Header将为text / javascript
响应内容看起来像这样:
1
handleResponse ({“数据”:123});