响应输出
响应(Response)对象用于动态响应客户端请求,控制发送给用户的信息。通常用于输出数据给客户端或者浏览器。
ThinkPHP的Response
响应对象由think\Response
类或者子类完成,ThinkPHP的响应输出是自动的(命令行模式除外),最终会调用Response
对象的send
方法完成输出。
Response
类不能直接实例化,必须使用 Response::make()
静态方式创建,建议直接使用系统提供的助手函数完成。
响应输出
大多数情况,我们不需要关注Response
对象本身,只需要在控制器的操作方法中返回数据即可。
最简单的响应输出是直接在路由闭包或者控制器操作方法中返回一个字符串,例如:
Route::get('hello/:name', function ($name) {
return 'Hello,' . $name . '!';
});
<?php
namespace app\controller;
class Index
{
public function hello($name='thinkphp')
{
return 'Hello,' . $name . '!';
}
}
由于默认是输出Html
输出,所以直接以html
页面方式输出响应内容。如果你发起一个JSON
请求的话,输出就会自动使用JSON
格式响应输出。
为了规范和清晰起见,最佳的方式是在控制器最后明确输出类型(毕竟一个确定的请求是有明确的响应输出类型),默认支持的输出类型包括:
输出类型 | 快捷方法 | 对应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 |
附件下载 | download | \think\response\File |
每一种输出类型其实对应了一个不同的Response
子类(response()
函数对应的是Response
基类),也可以在应用中自定义Response
子类满足特殊需求的输出。
例如我们需要输出一个JSON
数据给客户端(或者AJAX
请求),可以使用:
<?php
namespace app\controller;
class Index
{
public function hello()
{
$data = ['name' => '勾股OA', 'status' => '1'];
return json($data);
}
}
这些助手函数的返回值都是Response
类或者子类的对象实例,所以后续可以调用Response
基类或者当前子类的相关方法,后面我们会讲解相关方法。
如果你只需要输出一个html
格式的内容,可以直接使用
<?php
namespace app\controller;
class Index
{
public function hello()
{
$data = 'Hello,勾股OA!';
return response($data);
}
}
或者使用return
直接返回输出的字符串。
<?php
namespace app\controller;
class Index
{
public function hello()
{
return 'Hello,勾股OA!';
}
}