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.