HttpFoundation组件

编辑本页

警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 2.1,现已不再维护。

本页的更新版本用于Syob娱乐下载mfony 6.2(当前稳定版本)。

HttpFoundation组件

HttpFoundation组件为HTTP规范定义了一个面向对象的层。

在PHP中,请求由一些全局变量表示($ _GET$ _POST带有_file美元_COOKIE美元_SESSION美元,…),响应由一些函数(回声setcookie,……)。

Symfob娱乐下载ony2 HttpFoundation组件将这些默认的PHP全局变量和函数替换为面向对象层。

安装

你可以用两种不同的方式安装组件:

请求

创建请求的最常用方法是基于当前的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实例有方法来检索和更新它的数据:

ParameterBagInstance也有一些过滤输入值的方法:

所有getters最多有三个参数:第一个是参数名,第二个是参数不存在时返回的默认值:

1 2 3 4 5 6 7 8 9 10
//查询字符串为'?foo =酒吧'请求->查询->get (“foo”);//返回请求->查询->get (“酒吧”);//返回null请求->查询->get (“酒吧”“酒吧”);//返回'bar'

当PHP导入请求查询时,它处理如下请求参数foo(酒吧)=酒吧以一种特殊的方式创建数组。所以你可以得到喷火参数,你会得到一个数组酒吧元素。但有时,你可能想获取“原始”参数名的值:foo(酒吧).这是可能的ParameterBaggetter像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-* '头数据

您可以轻松地访问提取的基本数据接受- *头文件,使用以下方法:

访问其他数据

请求类有许多其他方法,您可以使用它们来访问请求信息。看一看请求API获取更多信息。

响应

一个响应对象保存了需要从给定请求发送回客户机的所有信息。构造函数最多接受三个参数:响应内容、状态代码和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编码的。

发送响应

在发送响应之前,可以通过调用准备()方法:

1
响应->准备(请求);

向客户端发送响应就像调用一样简单send ()

1
响应->send ();

设置cookie

方法可以对响应cookie进行操作公共属性:

1 2 3
使用ob娱乐下载组件HttpFoundation饼干响应->->setCookie (饼干(“foo”“酒吧”));

setCookie ()方法的实例饼干作为一个论证。

您可以通过clearCookie ()方法。

管理HTTP缓存

响应类有一组丰富的方法来操作与缓存相关的HTTP头:

setCache ()方法可用于在一个方法调用中设置最常用的缓存信息:

1 2 3 4 5 6 7 8
响应->setCache (数组“etag”= >“六边形abcdef”“last_modified”= >\ DateTime (),“max_age”= >600“s_maxage”= >600“私人”= >“公共”= >真正的));

要检查响应验证器(ETaglast - modified)匹配客户端请求中指定的条件值,使用isNotModified ()方法:

1 2 3
如果响应->isNotModified (请求)) {响应->send ();}

如果没有修改Response,它将状态代码设置为304并删除实际的响应内容。

重定向用户

要将客户端重定向到另一个URL,可以使用RedirectResponse类:

1 2 3
使用ob娱乐下载组件HttpFoundationRedirectResponse响应RedirectResponse (“http://example.com/”);

流媒体响应

2.1

Symfony 2.1中增加了对流响应的支持。ob娱乐下载

StreamedResponse类允许您将响应流回客户端。响应内容由PHP可调用对象而不是字符串表示:

1 2 3 4 5 6 7 8 9 10 11
使用ob娱乐下载组件HttpFoundationStreamedResponse响应StreamedResponse ();响应->setCallback (函数()回声“Hello World”;冲洗();睡眠(2);回声“Hello World”;冲洗();});响应->send ();

请注意

冲洗()函数不刷新缓冲。如果ob_start ()之前被调用过还是output_bufferingPhp.ini选项已启用,您必须调用ob_flush ()之前冲洗()

此外,PHP并不是唯一可以缓冲输出的层。您的web服务器也可能根据其配置进行缓冲。更重要的是,如果你使用fastcgi,缓冲根本不能被禁用。

下载文件

2.1

makeDisposition方法是在Symfony 2.1中添加的。ob娱乐下载

上传文件时,必须添加附加项标题到您的响应。虽然为基本文件下载创建这个头文件很容易,但使用非ascii文件名就比较麻烦了。的makeDisposition ()抽象了一个简单API背后的艰苦工作:

1 2 3 4 5
使用ob娱乐下载组件HttpFoundationResponseHeaderBagd响应->->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娱乐下载组件HttpFoundationJsonResponse响应JsonResponse ();响应->setData (数组“数据”= >123));

这将把数据数组编码为JSON并设置内容类型头来application / json

谨慎

避免XSSIJSON劫持,您应该将一个关联数组作为最外层数组传递给JsonResponse并且不是一个索引数组,因此最终结果是一个对象(例如。{"object": "不在数组中"})而不是数组(例如。[{"object": "在数组内"}]).读了OWASP指南获取更多信息。

JSONP回调

如果你正在使用JSONP,你可以设置数据应该传递给的回调函数:

1
响应->setCallback (“handleResponse”);

在这种情况下,内容类型Header将为text / javascript响应内容看起来像这样:

1
handleResponse ({“数据”123});

会话

会话信息在它自己的文档中:会话管理

此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。