代码之家  ›  专栏  ›  技术社区  ›  Magiranu

访问Slim 3响应对象的数据

  •  2
  • Magiranu  · 技术社区  · 7 年前

    我正在使用一个名为Slim 3的PHP框架,我想检查一下我的 Response 我想知道为什么这是不可能的。

    官方文档表明,Response对象实现了PSR 7 ResponseInterface,允许我检查身体。

    当我 var_dump($response->getBody(); 我只看到一个 protected 我找不到我的尸体 $stack 内容无处不在。

    文件说明了这一点,我认为这就是原因。你能确认一下吗?

    提醒 响应对象是不可变的。此方法返回包含新主体的响应对象的副本。

    资料来源: https://www.slimframework.com/docs/objects/response.html

    PHP控制器类

    class Controller
    {
        public function index($request, $response, $args)
        {
            // code
    
            $stack    = array($cars, $manufacturers);
            $response = $response->withJson($stack);
    
            return $response->withStatus(200);
        }
    }
    

    var_转储的输出

    class Slim\Http\Response#201 (5) {
      protected $status =>
      int(200)
      protected $reasonPhrase =>
      string(2) "OK"
      protected $protocolVersion =>
      string(3) "1.1"
      protected $headers =>
      class Slim\Http\Headers#200 (1) {
        protected $data =>
        array(1) {
          'content-type' =>
          array(2) {
            ...
          }
        }
      }
      protected $body =>
      class Slim\Http\Body#202 (7) {
        protected $stream =>
        resource(87) of type (stream)
        protected $meta =>
        array(6) {
          'wrapper_type' =>
          string(3) "PHP"
          'stream_type' =>
          string(4) "TEMP"
          'mode' =>
          string(3) "w+b"
          'unread_bytes' =>
          int(0)
          'seekable' =>
          bool(true)
          'uri' =>
          string(10) "php://temp"
        }
        protected $readable =>
        NULL
        protected $writable =>
        bool(true)
        protected $seekable =>
        NULL
        protected $size =>
        NULL
        protected $isPipe =>
        NULL
      }
    }
    
    1 回复  |  直到 7 年前
        1
  •  5
  •   odan    4 年前

    内容被写入HTTP响应体流。

    $content = $response->getBody()->__toString();
    

    $content = (string)$response->getBody();