【问题标题】:PHP Slim, issue when returning a responsePHP Slim,返回响应时出现问题
【发布时间】:2020-11-06 03:42:47
【问题描述】:

我正在尝试使用 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

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

【问题讨论】:

    标签: php slim


    【解决方案1】:

    解决了!必须这样写:

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

    【讨论】:

      【解决方案2】:

      你想要:

      $response->write() 
      

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

      【讨论】:

        【解决方案3】:

        根据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);
        

        所以它不返回实例,它只返回一个字节数。我怀疑您依赖于获得某种流畅的界面。

        【讨论】:

        • 但是使用 write() 方法似乎返回了我需要的东西,所以我认为没关系
        • 如果您愿意忽略错误消息,您也可以只使用echo json_encode($person)。但你不会使用 Slim。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-02-12
        • 1970-01-01
        • 2012-12-18
        • 2012-08-10
        • 1970-01-01
        • 1970-01-01
        • 2017-11-03
        相关资源
        最近更新 更多