PHP Slim,返回响应时出现问题

PHP Slim, issue when returning a response

我正在尝试 return 使用 Response 对象的一些内容。这些是实现的接口:

use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
use Slim\Factory\AppFactory;

然后,在 GET 函数中,我创建了自己的 JSON,并尝试将其作为响应返回:

$app->get('/getpersons', function(Request $request, Response $response, $args){
    $person= new stdClass();

    $person->id = 1;
    $person->name='Name example';
    $person->address = 'Street example';


    return $response->getBody()->write(json_encode($person));
});

但我遇到了下一个错误:

Return value of Slim\Handlers\Strategies\RequestResponse::__invoke() must
implement interface Psr\Http\Message\ResponseInterface

我不知道发生了什么。有帮助吗?

已解决!必须这样写:

$response->getBody()->write(json_encode($person));
return $response;

根据 Psr\Http\Message\StreamInterface 规范,write() 方法如下所示:

/**
 * Write data to the stream.
 *
 * @param string $string The string that is to be written.
 * @return int Returns the number of bytes written to the stream.
 * @throws \RuntimeException on failure.
 */
public function write($string);

所以它不是 return 实例,它只是 return 字节数。我怀疑你依赖于获得某种流畅的界面。

你想要:

$response->write() 

该方法 returns 响应对象。在内部它调用 $response->getBody()->write()