response->getBody() is empty in slim3 php framework
我在使用这个 slim3 php 代码时遇到了问题。在函数 createErrorReponse 函数中,$response->getBody() 为 null 或空。 PHP 在下面抱怨以下错误。如您所见, getBody() 大小为空,因此 write 无法处理它。不过,同一行也适用于其他功能。
HTTP/1.1 200 OK 内容类型:text/html;字符集=UTF-8 0
致命错误:在第 16 行的 /home/ubuntu/webapp/middleware/authmodule.php 中的非对象上调用成员函数 withHeader()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | <?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 框架。
希望对其他人有所帮助。
我的做法是:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | <?php use Slim\\Http\ equest; use Slim\\Http\ esponse; 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; } } |
我就这么说吧。我会在这段代码中抽象一些东西,这样我就不会重复自己了。我看到你在重复:
1 2 3 4 5 | public function createErrorResponse($code, $msg, Response $response) { return $response->withStatus($code) ->withHeader('Content-Type', 'application/json;charset=utf-8') ->withJson($msg); } |
在你所有的中间件中,也许在你的路由中。
希望这能让某人走上正轨。