handle($request); $stream = new class("php://memory", "rw") extends Stream { public function append_resource($resource) { stream_copy_to_stream($resource, $this->resource); } }; $body = $response->getBody(); $body->rewind(); switch (true) { case $response instanceof TextResponse: foreach(static::$dump_stack as $item) { $stream->write($item->renderText()); } $stream->append_resource($body->detach()); break; case $response instanceof JsonResponse: foreach(static::$dump_stack as $item) { $dump[] = $item->renderArray(); } if (isset($dump)) { $json = json_encode(array_merge(["_dump" => $dump ], json_decode($body->getContents() ?? "{}", true)), JsonResponse::DEFAULT_JSON_FLAGS); $stream->write(! is_string($json) ? json_encode($json, JsonResponse::DEFAULT_JSON_FLAGS) : $json); } $stream->append_resource($body->detach()); break; case $response instanceof HtmlResponse: #$stream->write(<<env: DEV #HTML); # no break; default: case $response instanceof Response: foreach(static::$dump_stack as $item) { $stream->write($item->renderHtml()); } $stream->append_resource($body->detach()); break; } return $response->withBody($stream); } public static function dump(...$what) { static::$dump_stack[] = $dump = new Dump(...$what); return $dump; } } } namespace { if (! function_exists('dump') ) { function dump(...$what) { return \Dump\DumpMiddleware::dump(...$what); } } }