view = $view; $this->api = $api; } /** * @param callable $content */ public function content(callable $content) { $this->content[] = $content; } public function document(Request $request): Document { $forumDocument = $this->getForumDocument($request); $document = new Document($this->view, $forumDocument, $request); $this->populate($document, $request); return $document; } protected function populate(Document $document, Request $request) { foreach ($this->content as $content) { $content($document, $request); } } private function getForumDocument(Request $request): array { $actor = $request->getAttribute('actor'); return $this->getResponseBody( $this->api->send(ShowForumController::class, $actor) ); } private function getResponseBody(Response $response): array { return json_decode($response->getBody(), true); } }