视频地址 https://www.bilibili.com/video/BV14E411t7T4?p=19&vd_source=4a69745b599dffec877b0fcfe130b092
1 代码
https://github.com/guainttt/seckill/commit/2eafcce7b837d1950ad8d889d326557699edeab6
2 控制器注入Response对象,支持数据自动转JSON输出
2.1 \pro\app\controllers\UserController.php
直接返回数组
public function user(int $bbb,Request $r,int $uid,int $aaa,Response $response) { // var_dump($r); //var_dump($r->getQueryParams()); //$response->testWrite('abc'); //return "bbb---".$uid; return ['uid'=>$uid,'username'=>'ttt']; }
2.2 \pro\core\http\Response.php
public function end() { $jsonConver = ['array']; //自动变成json格式 $res = $this->getBody(); if(in_array( gettype($res),$jsonConver)){ //string array object $this->swooleResponse->header("Content-type","application/json;charset=utf-8"); $res = json_encode($res); } $this->swooleResponse->write($res); $this->swooleResponse->end(); }
2.3 测试结果
3 Response自定义头 (支持中文)
3.1 \pro\app\controllers\UserController.php
public function user(int $bbb,Request $r,int $uid,int $aaa,Response $response) { $response->writeHtml('你好'); return ['uid'=>$uid,'username'=>'ttt']; }
3.2 \pro\core\http\Response.php
public function __construct($swooleResponse) { $this->swooleResponse = $swooleResponse; $this->_setHeader("Content-Type","text/plain;charset=utf-8"); } private function _setHeader($key,$value) { //https://wiki.swoole.com/#/http_server?id=header $this->swooleResponse->header($key,$value); }
4 支持自定义HTTP状态码
public function writeHttpStatus(int $code) { $this->swooleResponse->status($code); }
public function user(int $bbb,Request $r,int $uid,int $aaa,Response $response) { $response->writeHttpStatus(404); return ['uid'=>$uid,'username'=>'ttt']; }
5 跳转
手册 https://wiki.swoole.com/wiki/page/927.html
/** * @param string $url * @param int $code 301 永久跳转 302 零时跳转 */ public function writeRedirect(string $url,int $code=302) { //$this->swooleResponse->redirect($url,$code); //此方法跳转后服务器会报错 //Warning: Swoole\Http\Response::header(): Http request is finished. in /pro/pro/core/http/Response.php on line 59 $this->writeHttpStatus($code); $this->_setHeader("Location",$url); }
public function user(int $bbb,Request $r,int $uid,int $aaa,Response $response) { $response->writeRedirect('http://jtthink.com'); }
代码
https://github.com/guainttt/seckill/commit/0fca900a01bd8610b0f0dd5564297994dd42ae2c