response->getBody() 在 slim3 php 框架中是空的
response->getBody() is empty in slim3 php framework
我在使用 slim3 php 代码时遇到问题。在函数 createErrorReponse 函数中,$response->getBody() 为 null 或空。 Php 抱怨下面的错误。如您所见,getBody() 大小为空,因此无法对其进行写入。不过,同一行适用于其他功能。
HTTP/1.1 200 OK 内容类型:text/html;字符集=UTF-8 0
致命错误:在第 16
行 /home/ubuntu/webapp/middleware/authmodule.php 中的非对象上调用成员函数 withHeader()
<?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;
}
}
感谢您提醒有关错误报告和修复。
不过,我觉得有必要回答这个问题,以防万一您还没有完全放弃 PHP 和 Slim 框架。
希望对其他人有所帮助。
我的做法是:
<?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);
}
在你所有的中间件中,也许在你的路由中。
希望这能让某人走上正轨。
我在使用 slim3 php 代码时遇到问题。在函数 createErrorReponse 函数中,$response->getBody() 为 null 或空。 Php 抱怨下面的错误。如您所见,getBody() 大小为空,因此无法对其进行写入。不过,同一行适用于其他功能。 HTTP/1.1 200 OK 内容类型:text/html;字符集=UTF-8 0 致命错误:在第 16
行 /home/ubuntu/webapp/middleware/authmodule.php 中的非对象上调用成员函数 withHeader()<?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;
}
}
感谢您提醒有关错误报告和修复。 不过,我觉得有必要回答这个问题,以防万一您还没有完全放弃 PHP 和 Slim 框架。 希望对其他人有所帮助。
我的做法是:
<?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);
}
在你所有的中间件中,也许在你的路由中。 希望这能让某人走上正轨。