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()
我正在尝试 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()