大多数情况下,我们不需要关注 Response 对象本身,只需要在控制器的操作方法中返回数据既可。

1. 路由闭包响应字符串

路由:

  1. <?php
  2. /**
  3. * 响应输出
  4. */
  5. # 路由闭包中返回一个字符串
  6. Route::get('hello/:name', function ($name) {
  7. return 'Hello,' . $name;
  8. });

postman 测试:
image.png


2. 控制器响应字符串

控制器:

  1. <?php
  2. namespace app\test\controller;
  3. class Index
  4. {
  5. public function hello($name = '向上')
  6. {
  7. // 输出hello,world!
  8. return 'hello,world!' . $name;
  9. }
  10. }

postman 测试:
image.png


3. 输出的类型以及设置

由于默认是输出Html输出,所以直接以html页面方式输出响应内容。如果修改配置文件,设置:

  1. <?php
  2. // 默认输出类型
  3. 'default_return_type' => 'json',

则访问的输出结果就变成了JSON字符串(同样,还可以修改输出类型为xml)。

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

输出类型 快捷方法 对应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子类满足特殊需求的输出。
例如我们需要输出一个JSON数据给客户端(或者AJAX请求),可以使用:

  1. <?php
  2. namespace app\index\controller;
  3. class Index
  4. {
  5. public function hello()
  6. {
  7. $data = ['name' => 'thinkphp', 'status' => '1'];
  8. return json($data);
  9. }
  10. }

这些助手函数的返回值都是Response类或者子类的对象实例,所以后续可以调用Response基类或者当前子类的相关方法,后面我们会讲解相关方法。

如果你只需要输出一个html格式的内容,可以直接使用

  1. <?php
  2. namespace app\index\controller;
  3. class Index
  4. {
  5. public function hello()
  6. {
  7. $data = 'Hello,ThinkPHP!';
  8. return response($data);
  9. }
  10. }

或者使用return直接返回输出的字符串(前提是你的default_return_type设置是html)。

  1. <?php
  2. namespace app\index\controller;
  3. class Index
  4. {
  5. public function hello()
  6. {
  7. return 'Hello,ThinkPHP!';
  8. }
  9. }