2016-05-16 4 views
1

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); 

    } 


} 

答えて

0

にごgetArenaMedals方法で$playerArenaMedalStats->Results[0]を取得しようとしている。

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

私はそれをjson_decodeしなければなりませんでした最初に

0

それはあなたのgetPlayerArenaStats方法の終わりにreturn $resです。それはGuzzleHttp\Psr7\Response返し、あなたはRavisha Heshが言ったように、私はちょうどこれまでの私のgetPlayerArenaStatsでキャッシュを変更しなければならなかったMedalController

+0

返信$ res *を削除すると、私は同じことをしましたが、それでも同じエラーが返されます – David

+1

「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 –

+0

のような応答コードを受け取った場合にもエラーをスローします。今私はデータがエラーなくキャッシュされています! – David

関連する問題