【已解决】

浏览:688 发布日期:2021/07/25 分类:ThinkPHP6专区 关键字: Bug反馈
在Thinkphp6中遇到了Bug
代码大致如下// 控制器 继承于Base类
        $task = TaskModel::where('id', $task_id)->find();
        if(!$task){
            // 任务不存在
            return $this->failed('任务不存在');
        }
        $userinfo = $this->getUserInfo($token);
        $uid = $userinfo->id;
// Base类中的调用到的方法及常量
    const CACHE_USER_INFO = 'USER_INFO_%s';

    function failed($msg = '', $data = []){
        return $this->json(-1, $data, $msg);
    }

    function json($code = -1, $data = [], $msg = ''){
        return json(['code' => $code, 'data' => $data, 'msg' => $msg])->header(['content-type' => 'application/json; charset=utf-8']);
    }


    function getUserInfo($token = ''){
        return $this->get(SELF::CACHE_USER_INFO, $token);
    }

    // 取缓存
    function get(){
        $params = func_get_args();
        $key = call_user_func_array('sprintf', $params);
        return cache($key);
    }
缓存是用的本地redis

redis中对应数据: 见附件 -> 图1

请求信息及报错: 见附件 -> 图2


明明我Redis中存的是UserModel类 为什么报错会是Response\Json的报错呢?

我尝试输出了我获取到的UserInfo,仍然是Response\Json类的,数据如下object(think\response\Json)#74 (10) {
  ["options":protected]=>
  array(1) {
    ["json_encode_param"]=>
    int(256)
  }
  ["contentType":protected]=>
  string(16) "application/json"
  ["data":protected]=>
  array(3) {
    ["code"]=>
    int(-1)
    ["data"]=>
    array(0) {
    }
    ["msg"]=>
    string(15) "任务不存在"
  }
.....
我可以确认代码执行到了getUserinfo 因为return并没有返回

那么为什么Userinfo中获取到的会是think\Response\Json类的数据呢?









【原因】

控制器中的方法与base中的get重名,导致方法重写,一直请求的是控制器中的get方法,与TP无关
最佳答案
评论( 相关
后面还有条评论,点击查看>>