Request && Response && Container

这章将介绍三个常用到的对象:RequestResponseContainer

Request

Request对象是对客户端http请求的封装。我们在使用框架时就要避免再使用原生的PHP方法。

Request对象有一些属性保存了请求的信息,如:

  • $request属性保存了请求的body数据,相当于$_POST
  • $query属性保存了请求的查询字符串,相当于$_GET
  • $server属性保存了服务器环境信息,相当于$_SERVER
  • $file属性保存上传的文件,相当于$_FILES
  • $cookies属性保存了当前的Cookie,相当于$_COOKIE
  • $headers属性保存了当前的请求头,来自$_SERVER
    这些属性都是一个类似于数组类型的对象。

同时Request对象还有一些方法,如:getMethodgetPathInfogetClientIp等。

Response

Request是用户请求来的对象,那么Response就是返回给用户的响应对象。每个控制器执行完操作之后都会返回一个Response对象。

Response对象有一个$headers属性,可以用于设置响应请求的头部信息。然后再通过setContent方法设置响应请求的主体内容。

Symfony2框架默认提供了以下几种Response类,它们都是位于Symfony\Component\HttpFoundation命名空间下:

  • BinaryFileResponse
  • JsonResponse
  • RedirectResponse
  • Response
  • StreamedResponse

Container

Container对象是一个依赖注入的容器,它是一个类似数组类型的对象。服务对象和参数通过键值对的形式保存在它内部。使用它可以在任意地方通过键名访问到服务实体或者参数值。各个模块之间的接口调用可以通过注册服务的形式来完成,这使得程序之间的耦合度降低了。

例如,如果想要操作Session,那么可以通过Container获取到Session服务对象实体。

  1. $session = $container->get('session);

可以通过如下命令查看当前注册的服务:

  1. $ php app/console container:debug