twig = $twig; $this->assetExtension = $assetExtension; } public function getFormat(): string { return RenderOpenApi::HTML; } public function render(OpenApi $spec, array $options = []): string { $options += [ 'server_url' => null, 'assets_mode' => AssetsMode::CDN, 'swagger_ui_config' => [], ]; $this->twig->addFunction( new TwigFunction( 'nelmioAsset', new GetNelmioAsset($this->assetExtension, $options['assets_mode']) ) ); return $this->twig->render( '@NelmioApiDoc/SwaggerUi/index.html.twig', [ 'swagger_data' => ['spec' => $this->createJsonSpec($spec, $options['server_url'])], 'assets_mode' => $options['assets_mode'], 'swagger_ui_config' => $options['swagger_ui_config'], ] ); } private function createJsonSpec(OpenApi $spec, $serverUrl) { if ($serverUrl) { $spec->servers = [new Server(['url' => $serverUrl])]; } return json_decode($spec->toJson(), true); } }