ThinkPHP5源码学习篇--Response.php

本文深入探讨了ThinkPHP5框架中Response类的使用,包括不同类型的响应如html、json和redirect,重点解析了send方法的重要性和工作原理。文中详细解释了如何设置响应头、数据格式化以及在重定向中处理session的方法,同时提到了fastcgi_finish_request在提升页面响应速度中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Response使用

自从使用TP5后,Response和Request就随处可见了,那么在知道Request是请求相关业务的封装类后,Response是什么呢?
通过名字我们也可以看出来,Response是输出的封装类。比如Trace调试的实现、响应码设置、响应头部设置等等。


Response的几种类型

基于不同的type封装响应逻辑实现定制化向客户端输出。

/**
 * 创建Response对象
 * @access public
 * @param mixed  $data    输出数据
 * @param string $type    输出类型
 * @param int    $code
 * @param array  $header
 * @param array  $options 输出参数
 * @return Response|JsonResponse|ViewResponse|XmlResponse|RedirectResponse|JsonpResponse
*/
public static function create($data = '', $type = '', $code = 200, array $header = [], $options = [])
{
    //Response有Json、Jsonp、Redirect、View、Xml5个不同功能的子类
    //可自定义Response类 一般type参数默认都为json或html
    //type ==> redirect 将实例化think\response\Redirect对象
    //type ==> json 将实例化think\response\Json对象
    //type ==> jsonp 将实例化think\response\Jsonp对象
    //观察下发现,区别在与 响应header设置的不同,输出数据封装不同
    //对比下 output方法
    $class = false !== strpos($type, '\\') ? $type : '\\think\\response\\' . ucfirst(strtolower($type));
    //所以一般都是new static
    if (class_exists($class)) {
        $response = new $class($data, $code, $header, $options);
    } else {
        $response = new static($data, $code, $header, $options);
    }
    return $response;
}

通过调用静态static方法来实例化对象,其实直接new也能实例Response,但是这样操作无法选择不同的类型。

正常情况下,使用较多的有四种

Response::create();

控制器业务执行完成后,若不需输出body响应数据,按照以前的做法可能就是执行exit结束了。但是如此这么做,会导致没有执行到Response的send方法,至于sen

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值