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 (! empty($dump)) { $stream->write(json_encode(array_merge([ "_dump" => $dump ?? [] ], (array) json_decode($body->getContents() ?? "{}", true)), JsonResponse::DEFAULT_JSON_FLAGS)); } else { $stream = $body; } 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; } $stream->rewind(); 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); } } }