ob娱乐下载Symfony2和HTTP基础

编辑本页

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

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

ob娱乐下载Symfony2和HTTP基础

恭喜你!通过学习Symfony2,您将在成为ob娱乐下载一个更富有成效的全面发展的而且受欢迎的Web开发人员(实际上,最后一部分你要靠自己了)。ob娱乐下载Symfony2的构建是为了回归基础:开发能够让您更快地开发和构建更健壮的应用程序的工具,同时不妨碍您的工作。ob娱乐下载Symfony是建立在许多技术的最佳想法之上的:您将要学习的工具和概念代表了成千上万人多年来的努力。换句话说,您不仅仅是在学习“Symfony”,您还在学习web的基础知识、开发最佳实ob娱乐下载践,以及如何在Symfony2内部或独立使用许多令人惊叹的新PHP库。所以,准备好吧。

忠于Symfony2的哲ob娱乐下载学,本章首先解释了web开发的基本概念:HTTP。无论您的编程背景或首选的编程语言是什么,本章都是一个必读适合所有人。

HTTP很简单

HTTP(极客超文本传输协议)是一种允许两台机器相互通信的文本语言。就是这样!例如,当检查最新的xkcd漫画中,以下(大致)对话发生:

虽然实际使用的语言更正式一些,但它仍然非常简单。HTTP是用来描述这种简单的基于文本的语言的术语。无论你如何开发网页,你的服务器的目标是总是理解简单的文本请求,并返回简单的文本响应。

ob娱乐下载Symfony2就是围绕着这个现实建立起来的。不管你是否意识到,HTTP是你每天都在使用的东西。使用Symob娱乐下载fony2,您将学习如何掌握它。

步骤1:客户端发送一个请求

网上的每段对话都以请求.请求是由客户端(例如浏览器、iPhone应用程序等)以一种称为HTTP的特殊格式创建的文本消息。客户端将请求发送到服务器,然后等待响应。

看一下浏览器和xkcd web服务器之间交互(请求)的第一部分:

在HTTP语言中,这个HTTP请求实际上看起来像这样:

1 2 3 4
GET / HTTP/1.1 Host: xkcd.com Accept: text/html User-Agent: Mozilla/5.0 (Macintosh)

这个简单的信息传达了一切关于客户端正在请求哪些资源的必要信息。HTTP请求的第一行是最重要的,它包含两个内容:URI和HTTP方法。

URI(例如://联系,等等)是唯一的地址或位置,用来标识客户端想要的资源。HTTP方法(例如:得到)定义了你想做什么利用资源。HTTP方法是动词的请求,并定义一些常用的方式,您可以操作的资源:

得到 从服务器检索资源
帖子 在服务器上创建资源
更新服务器上的资源
删除 从服务器上删除资源

考虑到这一点,你可以想象一个删除特定博客条目的HTTP请求是什么样子的,例如:

1
DELETE /blog/15 HTTP/1.1

请注意

HTTP规范实际上定义了9种HTTP方法,但其中许多方法没有得到广泛使用或支持。实际上,许多现代浏览器不支持而且删除方法。

除了第一行之外,HTTP请求总是包含其他被称为请求头的信息行。报头可以提供广泛的信息,例如所请求的信息宿主时,客户端接受的响应格式(接受)和客户端用来发出请求的应用程序(用户代理).还有许多其他的标题,可以在维基百科上找到HTTP报头字段列表篇文章。

步骤2:服务器返回一个响应

一旦服务器接收到请求,它就确切地知道客户端需要哪些资源(通过URI),以及客户端想用该资源做什么(通过方法)。例如,对于GET请求,服务器准备好资源并在HTTP响应中返回它。考虑xkcd web服务器的响应:

翻译成HTTP,发送回浏览器的响应将是这样的:

1 2 3 4 5 6 7 8
HTTP/1.1 200 OK日期:Sat, 02 april 2011 21:05:05 GMT服务器:lighttpd/1.4.19内容类型:文本/html

HTTP响应包含所请求的资源(在本例中是HTML内容),以及关于响应的其他信息。第一行尤其重要,它包含HTTP响应状态代码(在本例中为200)。状态代码将请求的总体结果传递回客户机。请求成功了吗?有错误吗?存在不同的状态代码,表示成功、错误或客户端需要做某事(例如重定向到另一个页面)。完整的列表可以在维基百科上找到HTTP状态码列表篇文章。

与请求一样,HTTP响应包含额外的信息片段,称为HTTP报头。例如,一个重要的HTTP响应报头是内容类型.相同资源的主体可以以多种不同的格式返回,如HTML、XML或JSON内容类型头使用Internet媒体类型,如text / html告诉客户端正在返回哪种格式。常见媒体类型的列表可以在维基百科上找到常见媒体类型列表篇文章。

还有许多其他的头文件,其中一些非常强大。例如,某些头文件可以用来创建强大的缓存系统。

请求,响应和Web开发

这种请求-响应对话是驱动web上所有通信的基本过程。尽管这个过程很重要,也很强大,但它也不可避免地简单。

最重要的事实是:无论你使用哪种语言,你构建的应用程序类型(web,移动,JSON API),或者你遵循的开发理念,应用程序的最终目标都是总是理解每个请求并创建和返回适当的响应。

ob娱乐下载Symfony的架构就是为了匹配这一现实。

提示

要了解更多关于HTTP规范的信息,请阅读原文HTTP 1.1 RFC或者是HTTP Bis,这是澄清原始规范的积极努力。在浏览时检查请求和响应头的一个很好的工具是实时HTTP报头扩展Firefox。

PHP中的请求和响应

那么,在使用PHP时,如何与“请求”交互并创建“响应”呢?实际上,PHP从整个过程中抽取了一些内容:

1 2 3 4 5 6
uri_SERVER“REQUEST_URI”];喷火_GET“foo”];头(“的content - type: text / html”);回声请求的URI是:uri回声“foo”参数的值是:喷火

虽然听起来很奇怪,但这个小应用程序实际上是从HTTP请求中获取信息并使用它来创建HTTP响应。PHP准备了超全局变量,而不是解析原始的HTTP请求消息$ _SERVER而且$ _GET包含来自请求的所有信息。类似地,可以不返回http格式的文本响应,而是使用头()函数创建响应标头,并简单地打印出将作为响应消息内容部分的实际内容。PHP将创建一个真正的HTTP响应并将其返回给客户端:

1 2 3 4 5 6 7
HTTP/1.1 200 OK日期:Sat, 03 Apr 2011 02:14:33 GMT服务器:Apache/2.2.17 (Unix)内容类型:text/html请求的URI是:/testing?foo=ob娱乐下载symfony参数foo的值为:symfony

Symfony中的请求和响应ob娱乐下载

ob娱乐下载Symfony通过两个类提供了原始PHP方法的替代方案,允许您以更简单的方式与HTTP请求和响应进行交互。的请求类是HTTP请求消息的简单面向对象表示形式。有了它,所有的请求信息都触手可及:

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
使用ob娱乐下载组件HttpFoundation请求请求=请求::createFromGlobals ();//被请求的URI(例如/about)减去任何查询参数请求->getPathInfo ();//分别获取GET和POST变量请求->查询->get (“foo”);请求->请求->get (“酒吧”'如果bar不存在,则默认值');//检索SERVER变量请求->服务器->get (“HTTP_HOST”);//获取一个由foo标识的UploadedFile实例请求->文件->get (“foo”);//获取COOKIE值请求->饼干->get (“PHPSESSID”);//检索一个HTTP请求头,带有规范化的小写键请求->->get (“主机”);请求->->get (“content_type”);请求->getMethod ();// get, post, put, delete, head请求->getLanguages ();//客户端接受的语言数组

作为奖励,请求类在后台执行了许多您永远不需要担心的工作。例如,isSecure ()方法检查三个PHP中不同的值可以指示用户是否通过安全连接(即。https).

如上所示,$ _GET而且$ _POST变量可以通过public访问查询而且请求属性分别。每个对象都是aParameterBag对象,它具有类似于get ()有()所有()和更多。事实上,前面示例中使用的每个公共属性都是ParameterBag的某个实例。

Request类也有一个public属性属性,该属性保存与应用程序内部工作方式相关的特殊数据。对于Symfonob娱乐下载y2框架,属性保存由匹配路由返回的值,如_controllerid(如果你有{id}通配符),甚至匹配路由的名称(_route).的属性属性的存在完全是为了在其中准备和存储有关请求的特定于上下文的信息。

ob娱乐下载Symfony还提供了一个响应类:HTTP响应消息的简单PHP表示。这允许你的应用程序使用一个面向对象的接口来构造需要返回给客户端的响应:

1 2 3 4 5 6 7 8 9
使用ob娱乐下载组件HttpFoundation响应响应反应();响应->setContent (身体的< html > < > < h1 > Hello world !< / h1 > < /身体> < / html >”);响应->setStatusCode (200);响应->->集(“内容类型”“text / html”);//打印后面跟着内容的HTTP头响应->send ();

如果Sob娱乐下载ymfony没有提供其他任何东西,那么您已经拥有了一个用于轻松访问请求信息的工具包和一个用于创建响应的面向对象接口。即使在学习Symfony中许多强大的特性时,也要记住应用程序的目标始终是ob娱乐下载解释请求并根据应用程序逻辑创建适当的响应

提示

请求而且响应类是Symfony中包含的独立组件的一部分ob娱乐下载HttpFoundation.该组件可以完全独立于Symfony使用,还提供了处理会话和文件上传的类。ob娱乐下载

从请求到响应的过程

与HTTP本身一样,请求而且响应对象非常简单。构建应用程序的难点在于编写介于两者之间的内容。换句话说,真正的工作是编写解释请求信息并创建响应的代码。

您的应用程序可能会做很多事情,比如发送电子邮件、处理表单提交、将内容保存到数据库、呈现HTML页面以及使用安全性保护内容。如何管理所有这些并保持代码的组织性和可维护性?

ob娱乐下载Symfony就是为了解决这些问题而创建的,这样你就不必这样做了。

前置控制器

传统上,在构建应用程序时,网站的每个“页面”都是自己的物理文件:

1 2 3
Index.php contact.php blog.php

这种方法有几个问题,包括url的不灵活性(如果您想更改怎么办?blog.php欧宝平台是合法的吗news.php而不会破坏所有的链接?)以及每个文件必须手动包含一些核心文件集,以便安全性、数据库连接和站点的“外观”保持一致。

一个更好的解决方案是使用前端控制器:一个单独的PHP文件,处理进入应用程序的每个请求。例如:

/ index . php 执行index . php
/ index . php /联系 执行index . php
/ index . php /博客 执行index . php

提示

使用Apache的mod_rewrite(或与其他web服务器等效),url可以很容易地清理为公正//联系而且/博客

现在,每个请求都以完全相同的方式处理。前端控制器不是单独的url执行不同的PHP文件,而是总是不同的url到应用程序不同部分的路由是在内部完成的。这就用原来的方法解决了两个问题。几乎所有现代网络应用程序都这样做——包括像WordPress这样的应用程序。

保持组织

在前端控制器内部,您必须确定应该执行哪些代码以及应该返回什么内容。为了弄清楚,你将
需要检查传入的URI,并根据该值执行代码的不同部分。这很快就会变得很糟糕:

12 3 4 5 6 7 8 9 10 11 12 13 14
/ / index . php使用ob娱乐下载组件HttpFoundation请求使用ob娱乐下载组件HttpFoundation响应请求=请求::createFromGlobals ();路径请求->getPathInfo ();//被请求的URI路径如果(in_array (路径数组' / '))) {响应响应(“欢迎来到主页。”);}elseif路径= =' /接触') {响应响应(“联系我们”);}其他的响应响应(“未找到页面。”404);}响应->send ();

解决这个问题可能很困难。幸运的是它的完全Symfoob娱乐下载ny的设计目的。

Symfob娱乐下载ony应用程序流

当您让Symfony处理每ob娱乐下载个请求时,生活会轻松得多。ob娱乐下载Symfony对每个请求都遵循相同的简单模式:

ob娱乐下载Symfony2请求流

传入的请求由路由解释并传递给返回的控制器函数响应对象。

站点的每个“页面”都定义在路由配置文件中,该文件将不同的url映射到不同的PHP函数。每个PHP函数的工作,称为控制器,就是使用来自请求的信息(以及Symfony提供的许多其他工具)来创建和返回一个ob娱乐下载响应对象。换句话说,控制器在哪里你的代码:你在这里解释请求并创建响应。

就是这么简单!回顾:

  • 每个请求执行一个前端控制器文件;
  • 路由系统根据您创建的请求和路由配置中的信息来确定应该执行哪个PHP函数;
  • 执行正确的PHP函数,代码在其中创建并返回相应的函数响应对象。

正在ob娱乐下载运行的Symfony请求

在不深入研究太多细节的情况下,下面是这个过程的实际情况。假设你想加一个/联系页到您的Symfony应用ob娱乐下载程序。首先,添加一个条目/联系到您的路由配置文件:

  • YAML
  • XML
  • PHP
1 2 3 4
# app / config / routing.yml联系人:模式:/联系默认值:_controller:AcmeDemoBundle:主要:接触

请注意

这个例子使用了YAML定义路由配置。路由配置也可以用其他格式编写,如XML或PHP。

当有人参观/联系页,则匹配到此路由,并执行指定的控制器。你会学到路由章,AcmeDemoBundle:主要:接触string是一个简短的语法,指向一个特定的PHP方法contactAction在一个名为MainController

12 3 4 5 6 7 8 9 10 11 12
/ / src / Acme / DemoBundle /控制器/ MainController.php名称空间AcmeDemoBundle控制器使用ob娱乐下载组件HttpFoundation响应MainController公共函数contactAction()返回响应(' < h1 >联系我们!< / h1 >”);}}

在这个非常简单的例子中,控制器简单地创建了一个响应对象的HTML "<标题>联系我们!< / h1 >”.在控制器章,您将学习控制器如何呈现模板,允许您的“表示”代码(即实际写出HTML的任何东西)生活在一个单独的模板文件中。这就解放了控制器,只需要担心一些困难的事情:与数据库交互、处理提交的数据或发送电子邮件消息。

ob娱乐下载Symfony2:构建你的应用,而不是你的工具

您现在知道,任何应用程序的目标都是解释每个传入请求并创建适当的响应。随着应用程序的增长,保持代码的组织性和可维护性变得更加困难。同样复杂的任务总是一遍又一遍地出现:将内容持久化到数据库、呈现和重用模板、处理表单提交、发送电子邮件、验证用户输入和处理安全性。

好消息是,这些问题欧宝平台是合法的吗都不是独一无二的。ob娱乐下载Symfony提供了一个充满工具的框架,允许您构建应用程序,而不是工具。在Symfob娱乐下载ony2中,没有任何东西强加给您:您可以自由地使用完整的Symfony框架,也可以单独使用Symfony的一个部分。

独立工具:Symfony2ob娱乐下载组件

那么ob娱乐下载Symfony2吗?首先,Symfob娱乐下载ony2是一个包含20多个独立库的集合,可以在内部使用任何PHP项目。这些库称为ob娱乐下载Symfony2组件,包含对几乎任何情况都有用的内容,无论项目是如何开发的。举几个例子:

  • HttpFoundation—包含请求而且响应类,以及处理会话和文件上传的其他类;
  • 路由-强大而快速的路由系统,允许您映射一个特定的URI(例如。/联系)到一些关于该请求应如何处理的信息(例如执行contactAction ()方法);
  • 形式-一个功能齐全和灵活的架构,用于创建表格和处理提交表格;
  • 验证器创建关于数据的规则,然后验证用户提交的数据是否符合这些规则的系统;
  • 类加载器一个自动加载库,允许使用PHP类而不需要手动需要包含这些类的文件;
  • 模板一个用于呈现模板、处理模板继承(即用布局装饰模板)和执行其他常见模板任务的工具包;
  • 安全-一个强大的库,处理所有类型的安全应用程序内;
  • 翻译用于在应用程序中翻译字符串的框架。

这些组件中的每一个都是解耦的,可以用于任何PHP项目,无论您是否使用Symfony2框架。ob娱乐下载每一个部件都是按需使用,必要时更换。

完整的解决方案:Symfony2ob娱乐下载框架

然后呢的Symob娱乐下载fony2框架?的ob娱乐下载Symfony2框架是一个PHP库,它完成两个不同的任务:

  1. 提供了一组组件(例如Symfony2组件)和第三方库(例如Symfony2组件)。ob娱乐下载Swiftmailer用于发送电子邮件);
  2. 提供合理的配置和将所有这些部分连接在一起的“胶水”库。

该框架的目标是集成许多独立的工具,以便为开发人员提供一致的体验。甚至框架本身也是一个Symfony2包(即一个插件),可以完全ob娱乐下载配置或替换。

ob娱乐下载Symfony2提供了一套强大的工具,可以快速开发web应用程序,而不会对您的应用程序造成影响。普通用户可以通过使用Symfony2发行版快速开始开发,该发行版提供了具有合理默认值的项目框架。ob娱乐下载对于更高级的用户,天空是极限。

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