Skip to content

Commit 4eda8d5

Browse files
authored
Merge pull request #3764 from smatyas/asset-package
Configurable asset package
2 parents 1ae4dfc + 8c69482 commit 4eda8d5

File tree

11 files changed

+33
-13
lines changed

11 files changed

+33
-13
lines changed

src/Bridge/Symfony/Bundle/Action/SwaggerUiAction.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,11 +61,12 @@ final class SwaggerUiAction
6161
private $graphQlPlaygroundEnabled;
6262
private $swaggerVersions;
6363
private $swaggerUiAction;
64+
private $assetPackage;
6465

6566
/**
6667
* @param int[] $swaggerVersions
6768
*/
68-
public function __construct(ResourceNameCollectionFactoryInterface $resourceNameCollectionFactory, ResourceMetadataFactoryInterface $resourceMetadataFactory, NormalizerInterface $normalizer, TwigEnvironment $twig, UrlGeneratorInterface $urlGenerator, string $title = '', string $description = '', string $version = '', $formats = [], $oauthEnabled = false, $oauthClientId = '', $oauthClientSecret = '', $oauthType = '', $oauthFlow = '', $oauthTokenUrl = '', $oauthAuthorizationUrl = '', $oauthScopes = [], bool $showWebby = true, bool $swaggerUiEnabled = false, bool $reDocEnabled = false, bool $graphqlEnabled = false, bool $graphiQlEnabled = false, bool $graphQlPlaygroundEnabled = false, array $swaggerVersions = [2, 3], OpenApiSwaggerUiAction $swaggerUiAction = null)
69+
public function __construct(ResourceNameCollectionFactoryInterface $resourceNameCollectionFactory, ResourceMetadataFactoryInterface $resourceMetadataFactory, NormalizerInterface $normalizer, TwigEnvironment $twig, UrlGeneratorInterface $urlGenerator, string $title = '', string $description = '', string $version = '', $formats = [], $oauthEnabled = false, $oauthClientId = '', $oauthClientSecret = '', $oauthType = '', $oauthFlow = '', $oauthTokenUrl = '', $oauthAuthorizationUrl = '', $oauthScopes = [], bool $showWebby = true, bool $swaggerUiEnabled = false, bool $reDocEnabled = false, bool $graphqlEnabled = false, bool $graphiQlEnabled = false, bool $graphQlPlaygroundEnabled = false, array $swaggerVersions = [2, 3], OpenApiSwaggerUiAction $swaggerUiAction = null, $assetPackage = null)
6970
{
7071
$this->resourceNameCollectionFactory = $resourceNameCollectionFactory;
7172
$this->resourceMetadataFactory = $resourceMetadataFactory;
@@ -91,6 +92,7 @@ public function __construct(ResourceNameCollectionFactoryInterface $resourceName
9192
$this->graphQlPlaygroundEnabled = $graphQlPlaygroundEnabled;
9293
$this->swaggerVersions = $swaggerVersions;
9394
$this->swaggerUiAction = $swaggerUiAction;
95+
$this->assetPackage = $assetPackage;
9496

9597
if (null === $this->swaggerUiAction) {
9698
@trigger_error(sprintf('The use of "%s" is deprecated since API Platform 2.6, use "%s" instead.', __CLASS__, OpenApiSwaggerUiAction::class), E_USER_DEPRECATED);
@@ -143,6 +145,7 @@ private function getContext(Request $request, Documentation $documentation): arr
143145
'graphqlEnabled' => $this->graphqlEnabled,
144146
'graphiQlEnabled' => $this->graphiQlEnabled,
145147
'graphQlPlaygroundEnabled' => $this->graphQlPlaygroundEnabled,
148+
'assetPackage' => $this->assetPackage,
146149
];
147150

148151
$swaggerContext = ['spec_version' => $request->query->getInt('spec_version', $this->swaggerVersions[0] ?? 2)];

src/Bridge/Symfony/Bundle/DependencyInjection/ApiPlatformExtension.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,7 @@ private function registerCommonConfiguration(ContainerBuilder $container, array
217217
if ($config['name_converter']) {
218218
$container->setAlias('api_platform.name_converter', $config['name_converter']);
219219
}
220+
$container->setParameter('api_platform.asset_package', $config['asset_package']);
220221
$container->setParameter('api_platform.defaults', $this->normalizeDefaults($config['defaults'] ?? []));
221222
}
222223

src/Bridge/Symfony/Bundle/DependencyInjection/Configuration.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ public function getConfigTreeBuilder()
9292
->info('Specify the default operation path resolver to use for generating resources operations path.')
9393
->end()
9494
->scalarNode('name_converter')->defaultNull()->info('Specify a name converter to use.')->end()
95+
->scalarNode('asset_package')->defaultNull()->info('Specify an asset package name to use.')->end()
9596
->scalarNode('path_segment_name_generator')->defaultValue('api_platform.path_segment_name_generator.underscore')->info('Specify a path name generator to use.')->end()
9697
->booleanNode('allow_plain_identifiers')->defaultFalse()->info('Allow plain identifiers, for example "id" instead of "@id" when denormalizing a relation.')->end()
9798
->arrayNode('validator')

src/Bridge/Symfony/Bundle/Resources/config/swagger-ui.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
<argument>%api_platform.graphql.graphql_playground.enabled%</argument>
3838
<argument>%api_platform.swagger.versions%</argument>
3939
<argument type="service" id="api_platform.swagger_ui.action" />
40+
<argument>%api_platform.asset_package%</argument>
4041
</service>
4142

4243
<service id="api_platform.swagger_ui.context" class="ApiPlatform\Core\Bridge\Symfony\Bundle\SwaggerUi\SwaggerUiContext">
@@ -46,6 +47,7 @@
4647
<argument>%api_platform.graphql.enabled%</argument>
4748
<argument>%api_platform.graphql.graphiql.enabled%</argument>
4849
<argument>%api_platform.graphql.graphql_playground.enabled%</argument>
50+
<argument>%api_platform.asset_package%</argument>
4951
</service>
5052

5153
<service id="api_platform.swagger_ui.action" class="ApiPlatform\Core\Bridge\Symfony\Bundle\SwaggerUi\SwaggerUiAction" public="true">

src/Bridge/Symfony/Bundle/Resources/views/SwaggerUi/index.html.twig

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@
66

77
{% block stylesheet %}
88
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:400,700|Source+Code+Pro:300,600|Titillium+Web:400,600,700">
9-
<link rel="stylesheet" href="{{ asset('bundles/apiplatform/swagger-ui/swagger-ui.css') }}">
10-
<link rel="stylesheet" href="{{ asset('bundles/apiplatform/style.css') }}">
9+
<link rel="stylesheet" href="{{ asset('bundles/apiplatform/swagger-ui/swagger-ui.css', assetPackage) }}">
10+
<link rel="stylesheet" href="{{ asset('bundles/apiplatform/style.css', assetPackage) }}">
1111
{% endblock %}
1212

13-
{% set oauth_data = {'oauth': swagger_data.oauth|merge({'redirectUrl' : absolute_url(asset('bundles/apiplatform/swagger-ui/oauth2-redirect.html')) })} %}
13+
{% set oauth_data = {'oauth': swagger_data.oauth|merge({'redirectUrl' : absolute_url(asset('bundles/apiplatform/swagger-ui/oauth2-redirect.html', assetPackage)) })} %}
1414
{# json_encode(65) is for JSON_UNESCAPED_SLASHES|JSON_HEX_TAG to avoid JS XSS #}
1515
<script id="swagger-data" type="application/json">{{ swagger_data|merge(oauth_data)|json_encode(65)|raw }}</script>
1616
</head>
@@ -50,12 +50,12 @@
5050
</defs>
5151
</svg>
5252
<header>
53-
<a id="logo" href="https://api-platform.com"><img src="{{ asset('bundles/apiplatform/logo-header.svg') }}" alt="API Platform"></a>
53+
<a id="logo" href="https://api-platform.com"><img src="{{ asset('bundles/apiplatform/logo-header.svg', assetPackage) }}" alt="API Platform"></a>
5454
</header>
5555

5656
{% if showWebby %}
57-
<div class="web"><img src="{{ asset('bundles/apiplatform/web.png') }}"></div>
58-
<div class="webby"><img src="{{ asset('bundles/apiplatform/webby.png') }}"></div>
57+
<div class="web"><img src="{{ asset('bundles/apiplatform/web.png', assetPackage) }}"></div>
58+
<div class="webby"><img src="{{ asset('bundles/apiplatform/webby.png', assetPackage) }}"></div>
5959
{% endif %}
6060

6161
<div id="swagger-ui" class="api-platform"></div>
@@ -82,12 +82,12 @@
8282

8383
{% block javascript %}
8484
{% if (reDocEnabled and not swaggerUiEnabled) or (reDocEnabled and 're_doc' == active_ui) %}
85-
<script src="{{ asset('bundles/apiplatform/redoc/redoc.standalone.js') }}"></script>
86-
<script src="{{ asset('bundles/apiplatform/init-redoc-ui.js') }}"></script>
85+
<script src="{{ asset('bundles/apiplatform/redoc/redoc.standalone.js', assetPackage) }}"></script>
86+
<script src="{{ asset('bundles/apiplatform/init-redoc-ui.js', assetPackage) }}"></script>
8787
{% else %}
88-
<script src="{{ asset('bundles/apiplatform/swagger-ui/swagger-ui-bundle.js') }}"></script>
89-
<script src="{{ asset('bundles/apiplatform/swagger-ui/swagger-ui-standalone-preset.js') }}"></script>
90-
<script src="{{ asset('bundles/apiplatform/init-swagger-ui.js') }}"></script>
88+
<script src="{{ asset('bundles/apiplatform/swagger-ui/swagger-ui-bundle.js', assetPackage) }}"></script>
89+
<script src="{{ asset('bundles/apiplatform/swagger-ui/swagger-ui-standalone-preset.js', assetPackage) }}"></script>
90+
<script src="{{ asset('bundles/apiplatform/init-swagger-ui.js', assetPackage) }}"></script>
9191
{% endif %}
9292
{% endblock %}
9393

src/Bridge/Symfony/Bundle/SwaggerUi/SwaggerUiAction.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ public function __invoke(Request $request)
7070
'graphqlEnabled' => $this->swaggerUiContext->isGraphQlEnabled(),
7171
'graphiQlEnabled' => $this->swaggerUiContext->isGraphiQlEnabled(),
7272
'graphQlPlaygroundEnabled' => $this->swaggerUiContext->isGraphQlPlaygroundEnabled(),
73+
'assetPackage' => $this->swaggerUiContext->getAssetPackage(),
7374
];
7475

7576
$swaggerData = [

src/Bridge/Symfony/Bundle/SwaggerUi/SwaggerUiContext.php

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,17 @@ final class SwaggerUiContext
2121
private $graphQlEnabled;
2222
private $graphiQlEnabled;
2323
private $graphQlPlaygroundEnabled;
24+
private $assetPackage;
2425

25-
public function __construct(bool $swaggerUiEnabled = false, bool $showWebby = true, bool $reDocEnabled = false, bool $graphQlEnabled = false, bool $graphiQlEnabled = false, bool $graphQlPlaygroundEnabled = false)
26+
public function __construct(bool $swaggerUiEnabled = false, bool $showWebby = true, bool $reDocEnabled = false, bool $graphQlEnabled = false, bool $graphiQlEnabled = false, bool $graphQlPlaygroundEnabled = false, $assetPackage = null)
2627
{
2728
$this->swaggerUiEnabled = $swaggerUiEnabled;
2829
$this->showWebby = $showWebby;
2930
$this->reDocEnabled = $reDocEnabled;
3031
$this->graphQlEnabled = $graphQlEnabled;
3132
$this->graphiQlEnabled = $graphiQlEnabled;
3233
$this->graphQlPlaygroundEnabled = $graphQlPlaygroundEnabled;
34+
$this->assetPackage = $assetPackage;
3335
}
3436

3537
public function isSwaggerUiEnabled(): bool
@@ -61,4 +63,9 @@ public function isGraphQlPlaygroundEnabled(): bool
6163
{
6264
return $this->graphQlPlaygroundEnabled;
6365
}
66+
67+
public function getAssetPackage(): ?string
68+
{
69+
return $this->assetPackage;
70+
}
6471
}

tests/Bridge/Symfony/Bundle/Action/SwaggerUiActionTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,7 @@ public function testDoNotRunCurrentRequest(Request $request)
174174
'graphqlEnabled' => false,
175175
'graphiQlEnabled' => false,
176176
'graphQlPlaygroundEnabled' => false,
177+
'assetPackage' => null,
177178
'swagger_data' => [
178179
'url' => '/url',
179180
'spec' => self::SPEC,

tests/Bridge/Symfony/Bundle/DependencyInjection/ApiPlatformExtensionTest.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -835,6 +835,7 @@ private function getPartialContainerBuilderProphecy($configuration = null)
835835
'api_platform.http_cache.vary' => ['Accept'],
836836
'api_platform.http_cache.public' => null,
837837
'api_platform.http_cache.invalidation.max_header_length' => 7500,
838+
'api_platform.asset_package' => null,
838839
'api_platform.defaults' => ['attributes' => ['stateless' => true]],
839840
'api_platform.enable_entrypoint' => true,
840841
'api_platform.enable_docs' => true,
@@ -1139,6 +1140,7 @@ private function getBaseContainerBuilderProphecy(array $doctrineIntegrationsToLo
11391140
'api_platform.resource_class_directories' => Argument::type('array'),
11401141
'api_platform.validator.serialize_payload_fields' => [],
11411142
'api_platform.elasticsearch.enabled' => false,
1143+
'api_platform.asset_package' => null,
11421144
'api_platform.defaults' => ['attributes' => ['stateless' => true]],
11431145
];
11441146

tests/Bridge/Symfony/Bundle/DependencyInjection/ConfigurationTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,7 @@ private function runDefaultConfigTests(array $doctrineIntegrationsToLoad = ['orm
206206
],
207207
'allow_plain_identifiers' => false,
208208
'resource_class_directories' => [],
209+
'asset_package' => null,
209210
], $config);
210211
}
211212

tests/Bridge/Symfony/Bundle/SwaggerUi/SwaggerUiActionTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,7 @@ public function testDoNotRunCurrentRequest(Request $request)
169169
'graphqlEnabled' => false,
170170
'graphiQlEnabled' => false,
171171
'graphQlPlaygroundEnabled' => false,
172+
'assetPackage' => null,
172173
'swagger_data' => [
173174
'url' => '/url',
174175
'spec' => self::SPEC,

0 commit comments

Comments
 (0)