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