输出响应
大多数情况,我们不需要关注Response
对象本身,只需要在控制器的操作方法中返回数据即可。
最简单的响应输出是直接在路由闭包或者控制器操作方法中返回一个字符串,例如:
Route::get(\'hello/:name\', function ($name) {
return \'Hello,\' . $name . \'!\';
});
<?php
namespace app\\index\\controller;
class Index
{
public function hello($name=\'thinkphp\')
{
return \'Hello,\' . $name . \'!\';
}
}
json数据返回
方式一:修改配置文件
由于默认是输出html输出,所以直接以html页面方式输出响应内容,但也可以设置默认输出为json格式在config/app.php
\'default_return_type\' => \'json\',
但是这种修改了之后,所有数据都是json,如果全是接口可以使用这种方式
方式二:json方法返回
格式:
return json($data,http状态码,请求头);
或者
return json($data)->code(201)->header([\'Content-Type\' => \'application/json\']);
例:
public function req3($id = 0){
$data = [\'status\' => 1000, \'msg\' => \'添加成功\'];
return json($data,201,[\'username\' => \'admin\', \'password\' => \'admin8888\']);
}
重定向
我们有success 和error跳转但是这两种跳转都会有一个提示3秒的,不想要那个怎么办?
可以使用redirect助手函数进行重定向
redirect(\'地址或方法名\',数组参数)
例:
<?php
namespace app\\index\\controller;
class Index
{
//请求
public function req3($id = 0){
return $id;
}
public function resp($id = 0){
return redirect(url(\'req3\',[\'id\' => 56]));
}
}
文件下载
从5.1.21+
版本开始,支持文件下载功能,可以更简单的读取文件进行下载操作,支持直接下载输出内容。
你可以在控制器的操作方法中添加如下代码:
public function download()
{
$download = new \\think\\response\\Download(\'image.jpg\');
return $download->name(\'my.jpg\');
// 或者使用助手函数完成相同的功能
// download是系统封装的一个助手函数
return download(\'image.jpg\', \'my.jpg\');
}
访问download
操作就会下载命名为my.jpg
的图像文件。
下载文件的路径是服务器路径而不是URL路径,如果要下载的文件不存在,系统会抛出异常。
下载文件名可以省略后缀,会自动判断(后面的代码都以助手函数为例)
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);
}