响应

响应输出

为了规范和清晰起见,最佳的方式是在控制器最后明确输出类型(毕竟一个确定的请求是有明确的响应输出类型),默认支持的输出类型包括:

输出类型快捷方法对应Response类
HTML输出response\think\Response
渲染模板输出view\think\response\View
JSON输出json\think\response\Json
JSONP输出jsonp\think\response\Jsonp
XML输出xml\think\response\Xml
页面重定向redirect\think\response\Redirect
附件下载(V5.1.21+download\think\response\Download

每一种输出类型其实对应了一个不同的Response子类(response()函数对应的是Response基类),也可以在应用中自定义Response子类满足特殊需求的输出。

响应参数

一、设置数据

Response基类提供了data方法用于设置响应数据。

response()->data($data);
json()->data($data);

二、设置状态码

Response基类提供了code方法用于设置响应数据,但大部分情况一般我们是直接在调用助手函数的时候直接传入状态码,例如:

json($data,201);
view($data,401);
json($data)->code(201);

三、设置头信息

可以使用Response类的header设置响应的头信息

// 单个设置
header('Cache-control', 'no-cache,must-revalidate');
// 批量设置
header([
    'Cache-control' => 'no-cache,must-revalidate',
    'Last-Modified' => gmdate('D, d M Y H:i:s') . ' GMT',
]);

四、设置额外参数

有些时候,响应输出需要设置一些额外的参数,

json($data)
    ->options(['json_encode_param' => JSON_NUMERIC_CHECK | JSON_UNESCAPED_UNICODE]);

jsonp($data)
    ->options([
        'var_jsonp_handler'     => 'callback',
        'default_jsonp_handler' => 'jsonpReturn',
        'json_encode_param'     => JSON_PRETTY_PRINT,
    ]);

五、关闭当前的请求缓存(V5.1.5+

V5.1.5+版本开始,支持使用allowCache方法动态控制是否需要使用请求缓存。

// 关闭当前页面的请求缓存
json($data)->code(201)->allowCache(false);

自定义

function ajaxReturn($data, $type = '')
    {
        if (empty($type)) $type = 'JSON';
        switch (strtoupper($type)) {
            case 'JSON' :
                // 返回JSON数据格式到客户端 包含状态信息
                header('Content-Type:application/json; charset=utf-8');
                exit(json_encode($data));
            case 'XML'  :
                // 返回xml格式数据
                header('Content-Type:text/xml; charset=utf-8');
                exit(xml_encode($data));
            case 'JSONP':
                // 返回JSON数据格式到客户端 包含状态信息
                header('Content-Type:application/json; charset=utf-8');
                $handler = isset($_GET[C('VAR_JSONP_HANDLER')]) ? $_GET[C('VAR_JSONP_HANDLER')] : C('DEFAULT_JSONP_HANDLER');
                exit($handler . '(' . json_encode($data) . ');');
            case 'EVAL' :
                // 返回可执行的js脚本
                header('Content-Type:text/html; charset=utf-8');
                exit($data);
        }
    }

文件下载

    public function download()
    {
    	$download =  new \think\response\Download('image.jpg');
        return $download->name('my.jpg');
        // 或者使用助手函数完成相同的功能
    	// download是系统封装的一个助手函数
        return download('image.jpg', 'my.jpg');
    }

下载文件名可以省略后缀,会自动判断(后面的代码都以助手函数为例)

    public function download()
    {
    	// 和上面的下载文件名是一样的效果
        return download('image.jpg', 'my');
    }

如果需要设置文件下载的有效期,可以使用

    public function download()
    {
    	// 设置300秒有效期
        return download('image.jpg', 'my')->expire(300);
    }

除了expire方法外,还支持下面的方法:

方法描述
name命名下载文件
expire下载有效期
isContent是否为内容下载
mimeType设置文件的mimeType类型

助手函数提供了内容下载的参数,如果需要直接下载内容,可以在第三个参数传入true

    public function download()
    {
        $data = '这是一个测试文件';
        return download($data, 'test.txt', true);
    }

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值