Почему мой динамический маршрут возвращает 200 только в одном случае?

У меня есть маршрут, который вызывает сторонний API и возвращает ответ. Этот маршрут может принимать идентификатор в качестве параметра следующим образом: /my/route/{id},

Когда я прошу /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);
}

РЕДАКТИРОВАТЬ: Если я сделаю dd($res) вместо return $res внутри handleResponse(...) Я получаю код состояния 200, странно.

1

Решение

Для справки, этот ответ помог мне: 500 Внутренняя ошибка сервера для файла php не для HTML

В общем, я добавил ini_set('display_errors', 1) поэтому ответ будет включать в себя любые ошибки на серверной стороне, которые я не видел (оказалось, что в журнале ошибок apache есть такая информация), и, конечно же, была ошибка, которая не влияла непосредственно на ответ, поэтому я все равно получу правильный ответ данные.

Файл, в котором хранились файлы cookie, не был виден с точки зрения Guzzle, но само приложение Laravel могло видеть его. По понятным причинам вам необходимо указать полный путь к папке / файлу на сервере. В итоге я использовал собственную папку хранения Laravel для их хранения, поэтому мне пришлось сменить поставщика услуг с этого (где cookies/jar.json Раньше был в Ларавеле public папка:

$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
);
});
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]