промежуточное ПО — response-> gT; getBody () пусто в фреймворке slim3 php

У меня проблемы с этим slim3 php кодом. В функции createErrorReponse функция $ response-> getBody () является нулевой или пустой. Php жалуется на следующую ошибку ниже. Как видите, размер getBody () пуст и, следовательно, write не будет работать с ним. Эта же строка работает и в других функциях.
HTTP / 1.1 200 OK Content-Type: text / html; charset = UTF-8 0
Неустранимая ошибка: вызов функции-члена с помощью Header () для необъекта в /home/ubuntu/webapp/middleware/authmodule.php в строке 16

<?php
class AuthenticationMiddleware
{
public function isAuthenticated($userid, $authorization)
{
//do data validation here
return false;
}

public function createErrorResponse($code, $msg, $response)
{
echo $response;
echo $response->getBody()->getSize();
$response = $response->getBody()->write(json_encode('holla'));
$response = $response->withHeader('Content-Type', 'application/json; charset=utf-8');
return $response;
}

public function __invoke($request, $response, $next)
{
$userid = $request->getHeaderLine('userid');
$authorization = $request->getHeaderLine('Authorization');
if($this->isAuthenticated($userid, $authorization))
{
$response = $next($request, $response);
}
else
{
$msg = 'You are unauthenticated. Please login again';
$code = 400;
$response = $this->createErrorResponse($code, $msg, $response);
}
return $response;
}
}

0

Решение

Спасибо за сообщение об отчете об ошибке и исправлении.
Однако я чувствую необходимость дать ответ на этот вопрос, на случай, если вы вообще не отказались от PHP и Slim Framework.
Надеюсь, это поможет кому-то еще.

Мой подход к этому будет:

<?php

use Slim\Http\Request;
use Slim\Http\Response;

class AuthenticationMiddleware {

public function isAuthenticated($userid, $authorization) {
//do data validation here
return false;
}

public function createErrorResponse($code, $msg, Response $response) {
return $response->withStatus($code)
->withHeader('Content-Type', 'application/json;charset=utf-8')
->withJson($msg);
}

public function __invoke(Request $request, Response $response, $next) {
$userid = $request->getHeaderLine('userid');
$authorization = $request->getHeaderLine('Authorization');
if(!$this->isAuthenticated($userid, $authorization)) {
$msg = 'You are unauthenticated. Please login again';
$code = 400;
$this->createErrorResponse($code, $msg, $response);
} else {
$response = $next($request, $response);
}
return $response;
}
}

Позвольте мне просто сказать это. Я бы выделил несколько вещей здесь, в этом коде, чтобы я не стал повторяться. Я вижу, что вы повторяете:

public function createErrorResponse($code, $msg, Response $response) {
return $response->withStatus($code)
->withHeader('Content-Type', 'application/json;charset=utf-8')
->withJson($msg);
}

Во всем вашем промежуточном программном обеспечении и, возможно, в ваших маршрутах.
Надеюсь, что это ставит кого-то на правильный путь.

3

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

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

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