Skip to content

Commit 557649b

Browse files
authored
fix: errors retrieval and documentation (#6952)
1 parent 77b61ca commit 557649b

File tree

8 files changed

+8
-51
lines changed

8 files changed

+8
-51
lines changed

Action/ErrorPageAction.php

-38
This file was deleted.

Bundle/DependencyInjection/ApiPlatformExtension.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ public function load(array $configs, ContainerBuilder $container): void
115115
$jsonSchemaFormats = $config['jsonschema_formats'];
116116

117117
if (!$jsonSchemaFormats) {
118-
foreach (array_keys($formats) as $f) {
118+
foreach (array_merge(array_keys($formats), array_keys($errorFormats)) as $f) {
119119
// Distinct JSON-based formats must have names that start with 'json'
120120
if (str_starts_with($f, 'json')) {
121121
$jsonSchemaFormats[$f] = true;

Bundle/Resources/config/api.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
<service id="api_platform.property_accessor" alias="property_accessor" public="false" />
1414
<service id="api_platform.property_info" alias="property_info" public="false" />
1515
<service id="api_platform.negotiator" class="Negotiation\Negotiator" public="false" />
16-
<service id="api_platform.action.error_page" class="ApiPlatform\Symfony\Action\ErrorPageAction" public="true" />
1716

1817
<service id="api_platform.resource_class_resolver" class="ApiPlatform\Metadata\ResourceClassResolver" public="false">
1918
<argument type="service" id="api_platform.metadata.resource.name_collection_factory" />
@@ -166,6 +165,7 @@
166165
<service id="api_platform.state.error_provider" class="ApiPlatform\State\ErrorProvider">
167166
<argument key="$debug">%kernel.debug%</argument>
168167
<argument type="service" key="$resourceClassResolver" id="api_platform.resource_class_resolver" />
168+
<argument type="service" key="$resourceMetadataCollectionFactory" id="api_platform.metadata.resource.metadata_collection_factory" />
169169
<tag name="api_platform.state_provider" key="api_platform.state.error_provider" />
170170
</service>
171171

Bundle/Resources/config/openapi.xml

+1
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@
9393
<argument type="service" id="api_platform.openapi.options" />
9494
<argument type="service" id="api_platform.pagination_options" />
9595
<argument type="service" id="api_platform.router" />
96+
<argument>%api_platform.error_formats%</argument>
9697
</service>
9798

9899
<service id="api_platform.cache.openapi" parent="cache.system" public="false">

Bundle/Resources/config/routing/errors.xml

-6
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,6 @@
55
xsi:schemaLocation="http://symfony.com/schema/routing
66
http://symfony.com/schema/routing/routing-1.0.xsd">
77

8-
<route id="api_errors" path="/errors/{status}" methods="GET|HEAD">
9-
<default key="_controller">api_platform.action.error_page</default>
10-
11-
<requirement key="status">\d+</requirement>
12-
</route>
13-
148
<route id="api_validation_errors" path="/validation_errors/{id}" methods="GET|HEAD">
159
<default key="_controller">api_platform.action.not_exposed</default>
1610
</route>

Bundle/SwaggerUi/SwaggerUiProvider.php

+1
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ class: OpenApi::class,
7474

7575
// save our operation
7676
$request->attributes->set('_api_operation', $swaggerUiOperation);
77+
7778
$data = $this->openApiFactory->__invoke([
7879
'base_url' => $request->getBaseUrl() ?: '/',
7980
'filter_tags' => $request->query->all('filter_tags'),

Controller/MainController.php

+3-3
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313

1414
namespace ApiPlatform\Symfony\Controller;
1515

16-
use ApiPlatform\Metadata\Error;
1716
use ApiPlatform\Metadata\Exception\InvalidIdentifierException;
1817
use ApiPlatform\Metadata\Exception\InvalidUriVariableException;
1918
use ApiPlatform\Metadata\Exception\RuntimeException;
@@ -48,12 +47,13 @@ public function __construct(
4847
public function __invoke(Request $request): Response
4948
{
5049
$operation = $this->initializeOperation($request);
50+
5151
if (!$operation) {
5252
throw new RuntimeException('Not an API operation.');
5353
}
5454

5555
$uriVariables = [];
56-
if (!$operation instanceof Error) {
56+
if (!$request->attributes->has('exception')) {
5757
try {
5858
$uriVariables = $this->getOperationUriVariables($operation, $request->attributes->all(), $operation->getClass());
5959
$request->attributes->set('_api_uri_variables', $uriVariables);
@@ -86,7 +86,7 @@ public function __invoke(Request $request): Response
8686
if ($request->attributes->get('_api_operation') !== $operation) {
8787
$operation = $this->initializeOperation($request);
8888

89-
if (!$operation instanceof Error) {
89+
if (!$request->attributes->has('exception')) {
9090
try {
9191
$uriVariables = $this->getOperationUriVariables($operation, $request->attributes->all(), $operation->getClass());
9292
} catch (InvalidIdentifierException|InvalidUriVariableException $e) {

EventListener/ReadListener.php

+1-2
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313

1414
namespace ApiPlatform\Symfony\EventListener;
1515

16-
use ApiPlatform\Metadata\Error;
1716
use ApiPlatform\Metadata\Exception\InvalidIdentifierException;
1817
use ApiPlatform\Metadata\Exception\InvalidUriVariableException;
1918
use ApiPlatform\Metadata\HttpOperation;
@@ -73,7 +72,7 @@ public function onKernelRequest(RequestEvent $event): void
7372
}
7473

7574
$uriVariables = [];
76-
if (!$operation instanceof Error && $operation instanceof HttpOperation) {
75+
if (!$request->attributes->has('exception') && $operation instanceof HttpOperation) {
7776
try {
7877
$uriVariables = $this->getOperationUriVariables($operation, $request->attributes->all(), $operation->getClass());
7978
} catch (InvalidIdentifierException|InvalidUriVariableException $e) {

0 commit comments

Comments
 (0)