Skip to content

Commit d74b2b5

Browse files
authoredSep 17, 2024··
fix: swagger ui with route identifier (#6616)
1 parent 06a647a commit d74b2b5

File tree

7 files changed

+14
-2
lines changed

7 files changed

+14
-2
lines changed
 

‎features/openapi/docs.feature

+6
Original file line numberDiff line numberDiff line change
@@ -438,3 +438,9 @@ Feature: Documentation support
438438
And I send a "GET" request to "/docs.jsonopenapi"
439439
Then the response status code should be 200
440440
And the response should be in JSON
441+
442+
Scenario: OpenAPI UI is enabled for docs endpoint
443+
Given there are 1 dummy objects
444+
Given I add "Accept" header equal to "text/html"
445+
And I send a "GET" request to "/dummies/1.html"
446+
Then the response status code should be 200

‎src/Laravel/Controller/ApiPlatformController.php

+1
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ public function __invoke(Request $request): Response
5151
}
5252

5353
$uriVariables = $this->getUriVariables($request, $operation);
54+
$request->attributes->set('_api_uri_variables', $uriVariables);
5455
// at some point we could introduce that back
5556
// if ($this->uriVariablesConverter) {
5657
// $context = ['operation' => $operation, 'uri_variables_map' => $uriVariablesMap];

‎src/Laravel/Exception/ErrorHandler.php

+1
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,7 @@ public function register(): void
150150
$dup->attributes->remove('exception');
151151
// These are for swagger
152152
$dup->attributes->set('_api_original_route', $request->attributes->get('_route'));
153+
$dup->attributes->set('_api_original_uri_variables', $request->attributes->get('_api_uri_variables'));
153154
$dup->attributes->set('_api_original_route_params', $request->attributes->get('_route_params'));
154155
$dup->attributes->set('_api_requested_operation', $request->attributes->get('_api_requested_operation'));
155156

‎src/Laravel/State/SwaggerUiProcessor.php

+2-1
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,8 @@ public function process(mixed $openApi, Operation $operation, array $uriVariable
8080
$status = 200;
8181
$requestedOperation = $request?->attributes->get('_api_requested_operation') ?? null;
8282
if ($request->isMethodSafe() && $requestedOperation && $requestedOperation->getName()) {
83-
$swaggerData['id'] = $request->get('id');
83+
// TODO: what if the parameter is named something else then `id`?
84+
$swaggerData['id'] = ($request->attributes->get('_api_original_uri_variables') ?? [])['id'] ?? null;
8485
$swaggerData['queryParameters'] = $request->query->all();
8586

8687
$swaggerData['shortName'] = $requestedOperation->getShortName();

‎src/Symfony/Bundle/SwaggerUi/SwaggerUiProcessor.php

+2-1
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,8 @@ public function process(mixed $openApi, Operation $operation, array $uriVariable
8080
$status = 200;
8181
$requestedOperation = $request?->attributes->get('_api_requested_operation') ?? null;
8282
if ($request->isMethodSafe() && $requestedOperation && $requestedOperation->getName()) {
83-
$swaggerData['id'] = $request->get('id');
83+
// TODO: what if the parameter is named something else then `id`?
84+
$swaggerData['id'] = ($request->attributes->get('_api_original_uri_variables') ?? [])['id'] ?? null;
8485
$swaggerData['queryParameters'] = $request->query->all();
8586

8687
$swaggerData['shortName'] = $requestedOperation->getShortName();

‎src/Symfony/Controller/MainController.php

+1
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ public function __invoke(Request $request): Response
5656
if (!$operation instanceof Error) {
5757
try {
5858
$uriVariables = $this->getOperationUriVariables($operation, $request->attributes->all(), $operation->getClass());
59+
$request->attributes->set('_api_uri_variables', $uriVariables);
5960
} catch (InvalidIdentifierException|InvalidUriVariableException $e) {
6061
throw new NotFoundHttpException('Invalid uri variables.', $e);
6162
}

‎src/Symfony/EventListener/ErrorListener.php

+1
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ protected function duplicateRequest(\Throwable $exception, Request $request): Re
113113
// These are for swagger
114114
$dup->attributes->set('_api_original_route', $request->attributes->get('_route'));
115115
$dup->attributes->set('_api_original_route_params', $request->attributes->get('_route_params'));
116+
$dup->attributes->set('_api_original_uri_variables', $request->attributes->get('_api_uri_variables'));
116117
$dup->attributes->set('_api_requested_operation', $request->attributes->get('_api_requested_operation'));
117118
$dup->attributes->set('_api_platform_disable_listeners', true);
118119

0 commit comments

Comments
 (0)
Please sign in to comment.