Laravel 5 APIにキャッシュを実装しようとしていますが、問題があります。 I'amは今、このエラーを取得:MedalController.phpライン19で
ErrorException:
未定義のプロパティ:これはなぜGuzzleHttp \ Psr7 \レスポンス:: $は
結果は、誰もが把握することができます私のヘッダーを取得していない? 私は本当にI'amので、おそらくここ
何かが欠けている、前にキャッシュを使用したことがないこれはI'amは、呼び出し元とヘイロー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;
}
}
マイヘッダを呼び出して、プレーヤーのためのすべてのメダルを取得しようとMedalControler:
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);
}
}
返信$ res *を削除すると、私は同じことをしましたが、それでも同じエラーが返されます – David
「GetDataController」の「getPlayerArenaStats」メソッドで、GuzzleHttp \ "Cache :: put( 'stats'、$)を使用したキャッシュへの応答あなたはそれを変数 "$ playerArenaMedalStats = Cache :: get( 'stats');に渡します。次に、 "getArenaMedals"メソッドに渡します。 getArenaMedalsでは、 "$ playerArenaMedalStats-> Results [0]"を呼び出します。それが問題です。したがって、JsonはGetData Controllerに$ res Cacheをデコードする必要があります。 'Cache :: put( 'stats'、json_decode($ res-> getBody())、10); ' \t 「return $ res」は、500 –
のような応答コードを受け取った場合にもエラーをスローします。今私はデータがエラーなくキャッシュされています! – David