小白兔晒黑了

导航

 

视频地址 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

posted on 2022-06-30 23:23  小白兔晒黑了  阅读(39)  评论(0编辑  收藏  举报