Php 未定义的属性:GuzzleHttp\Psr7\Response::$Results-laravel5.2使用API
我正在尝试在我的Laravel5API中实现缓存,但遇到了问题。我现在收到这个错误: MedalController.php第19行出现错误异常: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
未定义的属性: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
没有太多经验,但我认为这就是我的想法