Php 未定义的属性:GuzzleHttp\Psr7\Response::$Results-laravel5.2使用API

Php 未定义的属性:GuzzleHttp\Psr7\Response::$Results-laravel5.2使用API,php,laravel,caching,laravel-5.2,Php,Laravel,Caching,Laravel 5.2,我正在尝试在我的Laravel5API中实现缓存,但遇到了问题。我现在收到这个错误: MedalController.php第19行出现错误异常: 未定义的属性:GuzzleHttp\Psr7\Response::$Results 有人知道为什么我的头球没拿到吗? 我以前从未真正使用过缓存,所以我可能在这里遗漏了一些东西 这就是我打电话给Halo 5游戏中每位玩家并获得奖牌数量的方式: GetDataController: class GetDataController extends Cont

我正在尝试在我的Laravel5API中实现缓存,但遇到了问题。我现在收到这个错误:

MedalController.php第19行出现错误异常:
未定义的属性:GuzzleHttp\Psr7\Response::$Results

有人知道为什么我的头球没拿到吗? 我以前从未真正使用过缓存,所以我可能在这里遗漏了一些东西

这就是我打电话给Halo 5游戏中每位玩家并获得奖牌数量的方式:

GetDataController:

class GetDataController extends Controller {


    /**
     * Fetch a Players Arena Stats
     *
     * @param $gamertag
     * @return mixed
     */
    public function getPlayerArenaStats($gamertag) {

        $client = new GuzzleHttp\Client();

        $baseURL = 'https://www.haloapi.com/stats/h5/servicerecords/arena?players=' . $gamertag;

        $res = $client->request('GET', $baseURL, [
            'headers' => [
                'Ocp-Apim-Subscription-Key' => env('Ocp-Apim-Subscription-Key')
            ]
        ]);

        Cache::put('stats', $res, 10);

        if ($res->getStatusCode() == 200) {
            return $result = json_decode($res->getBody());
        } elseif ($res->getStatusCode() == 404) {
            return $result = redirect()->route('/');
        }

        return $res;
    }

}
我的医疗控制员呼叫头球并试图为一名球员获得所有奖牌:

class MedalController extends Controller {

    /**
     * Get a Players Arena Medals
     *
     * @param $playerArenaMedalStats
     * @return mixed
     */
    public function getArenaMedals($playerArenaMedalStats) {


        $results = collect($playerArenaMedalStats->Results[0]->Result->ArenaStats->MedalAwards);

        $array = $results->sortByDesc('Count')->map(function ($item, $key) {
            return [
                'MedalId' => $item->MedalId,
                'Count' => $item->Count,
            ];
        });

        return $array;
    }


}
这就是获取、解码和返回奖牌的方式:

class StatsController extends Controller {


    /**
     * Return all Stats for a particular player
     * 
     * @param Request $request
     * @return mixed
     */
    public function index(Request $request) {

        if (Cache::has('stats')) {
            $playerArenaMedalStats = Cache::get('stats');
            $playerArenaMedalStatsArray = app('App\Http\Controllers\MedalController')->getArenaMedals($playerArenaMedalStats);
            $arenaMedals = json_decode($playerArenaMedalStatsArray, true);
        } else {
            app('App\Http\Controllers\GetData\GetDataController')->getPlayerArenaStats($gamertag);
        }

      // More stuff here, shortened for simplicicty

      return view('player.stats')->with('arenaMedals', $arenaMedals);

    }


}

它是
getPlayerArenaStats
方法末尾的
return$res
。它返回
GuzzleHttp\Psr7\Response
,您试图在
MedalController上的
getArenaMedals
方法中获取
$PlayerRenamedAlStats->Results[0]
,正如Ravisha Hesh所说,我只需将GetPlayerRenastats中的缓存更改为:

 Cache::put('stats', json_decode($res->getBody()), 10);

我必须先对它进行json_解码

如果你说要删除return$res,那么我就这么做了,它仍然会给我同样的错误对不起,我的错,这不是问题所在,在“GetDataController”上的“GetPlayerRenastats”方法中,你使用“Cache::put('stats',$res,10);”将GuzzleHttp\Psr7\响应放入缓存,然后在StatController中“将其放入变量”$playerRenamedAlStats=Cache::get('stats');。然后将其传递到“getArenaMedals”方法。在getArenaMedals中调用“$PlayerRenamedAlStats->Results[0]”。这就是问题所在。因此,您必须将Json decode$res缓存放入GetData Controller中。
Cache::put('stats',Json_decode($res->getBody()),10);
“返回$res“如果您得到像500这样的响应代码,也会抛出错误。是的,这很有效。现在我知道数据正在缓存,没有错误!我只是想问一下缓存是如何工作的。那么,这是否意味着每次我加载一个用户配置文件时,它都会在10分钟内更新“奖牌”,直到缓存结束?我对
cache
没有太多经验,但我认为这就是我的想法