-
-
Notifications
You must be signed in to change notification settings - Fork 958
Description
API Platform version(s) affected: 3.4.* (looking at the code, could be also 4.* but not tested)
Description
Having a resource which has a sub resource with a ApiProperty's genId at false generates an error while using command api:openapi:export:
In SchemaFactory.php line 240:
Notice: Indirect modification of overloaded element of ArrayObject has no effect
How to reproduce
That's the issue, I don't know how I ended up with this.
I tried to replicate this in a fresh APIP 4.1 distrib, but didn't manage to.
I didn't find a 3.4 distrib to test on a clean environment, so I tried to replicate on some professional project.
Investigating via step debug, it seems related to both sub resources and the presence of normalizationContext.
It's like the SchemaFactory generates a sub schema (v3.4 l231) of the sub resource that doesn't contains @id (due to serialization groups?) and then tries to delete it (v3.4 l240) but the @id is not existing then triggering the error.
Possible Solution
In the JsonSchema/SchemaFactory (v3.4 l240, v.4.0 l230, v4.1 l229), add in the condition before removing the @id part, a test of the key to delete:
if (
isset($subSchema->getDefinitions()[$subDefinitionName])
&& isset($subSchema->getDefinitions()[$subDefinitionName]['properties']['@id'])
) {
unset($subSchema->getDefinitions()[$subDefinitionName]['properties']['@id']);
}I can do a PR to fix it, but as I wasn't enable to reproduce it outside of 3.4 I wanted to have some external feedback (cc @soyuka)
Additional Context
Full error:
Error thrown while running command "api:openapi:export --output='docs/swagger_docs.json'". Message: "Notice: Indirect modification of overloaded element of ArrayObject has no effect" ["exception" => ErrorException { …},"command" => "api:openapi:export --output='docs/swagger_docs.json'","message" => "Notice: Indirect modification of overloaded element of ArrayObject has no effect"]
In SchemaFactory.php line 240:
Notice: Indirect modification of overloaded element of ArrayObject has no effect
api:openapi:export [-y|--yaml] [-o|--output [OUTPUT]] [--spec-version [SPEC-VERSION]] [--api-gateway]
The quoted code was introduced by 99262dc, which focus on command api:json-schema:generate, but make api:openapi:export fail in the above situation.