$typeMap the map of $discriminatorProperty values to their * types */ protected function applyOpenApiDiscriminator( Model $model, OA\Schema $schema, ModelRegistry $modelRegistry, string $discriminatorProperty, array $typeMap ): void { $weakContext = Util::createWeakContext($schema->_context); $schema->oneOf = []; $schema->discriminator = new OA\Discriminator(['_context' => $weakContext]); $schema->discriminator->propertyName = $discriminatorProperty; $schema->discriminator->mapping = []; foreach ($typeMap as $propertyValue => $className) { $oneOfSchema = new OA\Schema(['_context' => $weakContext]); $oneOfSchema->ref = $modelRegistry->register(new Model( new Type(Type::BUILTIN_TYPE_OBJECT, false, $className), $model->getGroups(), $model->getOptions() )); $schema->oneOf[] = $oneOfSchema; $schema->discriminator->mapping[$propertyValue] = $oneOfSchema->ref; } } }