2016-07-14 7 views
1

私はサードパーティのAPIを呼び出し、その応答を返すルートを持っています。このルートは、ID:/my/route/{id}のようなパラメータとしてIDを取ることができます。なぜ私のダイナミックルートは1つだけのカーカスで200を返しますか?

私が/my/route/1を要求すると、私は/my/route/2/my/route/3/my/route/4などを取得すると500エラーが発生します。

面白いことは、私はいつも正しい応答のボディを得ることです。したがって、200と500の両方の応答が私が必要とするデータを返しています。

<?php 

namespace App\Http\Controllers\Matrix; 

use App\Http\Controllers\Controller; 
use Illuminate\Http\Request; 
use Illuminate\Http\Response; 

class SponsorReadingController extends Controller 
{ 
    /** 
    * SponsorReadingController constructor. 
    */ 
    public function __construct() 
    { 
     $this->cookieJar = app('MatrixCookieJar'); 
     $this->client = app('GuzzleClientForMatrix'); 
    } 


    public function getSponsor($sponsorId, Request $request) 
    { 
     // TODO: Refactor this monstrous function 

     if (!AuthController::isAlreadyLoggedIn($request)) { 
      $loginRes = AuthController::loginToMatrixApi($this->cookieJar); 

      if ($loginRes->getStatusCode() === 200) { 
       $sessionId = AuthController::getSessionIdFromResponse($loginRes); 
      } else { 
       return $loginRes; 
      } 
     } else { 
      $sessionId = null; 

      AuthController::setAuthCookie(
       $this->cookieJar, $request->cookie('matrix_api_session') 
      ); 
     } 

     $respData = [ 
      'error' => null, 
      'message' => null, 
      'data' => json_decode(
       $this->client->get(
        '/admin/sponsor/detail', 
        [ 
         'query' => ['sponsorId' => $sponsorId], 
         'cookies' => $this->cookieJar, 
         'allow_redirects' => false 
        ] 
       )->getBody())->response 
     ]; 

     return $this->handleResponse($respData, $sessionId); 
    } 


    /** 
    * Handle the response with the provided data and 
    * cookie value. 
    * 
    * @param array $respData 
    * @param string $cookieVal 
    * @return Response 
    */ 
public function handleResponse($respData, $cookieVal) 
{ 
    if (!empty($cookieVal)) { 
     return response()->json($respData)->withCookie(
      cookie('matrix_api_session', $cookieVal, 29, '/matrix/api') 
     ); 
    } 

    return response()->json($respData); 
} 

EDIT:私はhandleResponse(...)dd($res)の代わりreturn $resをすれば私は、奇妙な200のステータスコードを取得getSponsor(..)が、ここでトリガされたとき

私の問題があります。参考のため

+0

cookies/jar.jsonはLaravelのpublicフォルダにあったところ(私はそれらを格納するためにLaravel自身の保存フォルダを使用して終了したので、私はこのことから私のサービスプロバイダを変更しなければなりませんでしたハンドルレスポンスやgetSponsorのエラーですgetSponsorがhandleResponseから結果を返そうとしたときに何かが起きているようです – Daniel

+0

'getSponsor()'は最終的に 'handleResponse()'を返します。ステータスコードはすべての呼び出しで常に200になります。私は頭を壊しています。 – jstudios

+0

Wh handleResponseに送信する前に$ respDataをダンプするとどうなりますか?あなたはいくつかのIDが働いていると言いましたが、何もしません。また、$ resから200レスポンスから戻るのは唯一のものですか?今テストしたところ、Response()に渡したデータを含むレスポンスオブジェクトが返されました。 – Daniel

答えて

0

、この答えは私を助けた:500 Internal Server Error for php file not for html

をだから、基本的に、私は応答が、私は見ていなかったバックエンド上の任意のエラーが含まれるini_set('display_errors', 1)を追加しました(Apacheのエラーログがそれを持ってい判明しました)、確かに十分な応答に影響していないエラーがあったので、私はまだ正しい応答データを取得します。

クッキーが保存されていたファイルは、Guzzleの観点から見ることはできませんでしたが、Laravelアプリケーション自体がそれを見ることができました。明らかな理由から、サーバー上のフォルダー/ファイルへのフルパスを指定する必要があります。これに

$this->app->bind('MatrixCookieJar', function ($app) { 
    return new FileCookieJar(
     'cookies/jar.json', true 
    ); 
}); 

::だから

$this->app->singleton('MatrixCookieJar', function ($app) { 
    return new FileCookieJar(
     storage_path('cookies').'/'.'jar.json', true 
    ); 
}); 
関連する問題