У меня есть маршрут, который вызывает сторонний API и возвращает его ответ. Этот маршрут может принимать ID как параметр, подобный этому: /my/route/{id}
.Почему мой динамический маршрут возвращает 200 только на один случай?
Когда я прошу /my/route/1
я получаю 200 успеха, но когда я /my/route/2
, /my/route/3
, /my/route/4
и т.д. Я получаю ошибку 500.
Самое забавное, что я всегда получаю правильное тело ответа. Таким образом, ответы 200 и 500 возвращают нужные мне данные.
Мой вопрос, когда getSponsor(..)
срабатывает здесь:
<?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: Если я dd($res)
вместо return $res
внутри handleResponse(...)
я получить код статуса 200, странно.
Так это ошибка в ответе на дескриптор или в getSponsor? Кажется, что что-то может произойти, когда getSponsor пытается вернуть ваш результат из handleResponse. – Daniel
Ну 'getSponsor()' в конечном счете возвращает 'handleResponse()'. Самое смешное, что если я сброшу код статуса я всегда получаю 200 во всех вызовах. Я разбиваю себе голову. – jstudios
Wh в случае, если вы выгружаете $ respData перед отправкой в handleResponse? Вы упомянули некоторые работы с ID, и некоторые не делают. Также, это единственное, что возвращается от ответа $ res 200? Когда я тестировал его только сейчас, у меня появился объект ответа, который включал данные, которые я передал в Response(). – Daniel