$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 = []; $schema->discriminator = new OA\Discriminator([]); $schema->discriminator->propertyName = $discriminatorProperty; $schema->discriminator->mapping = []; foreach ($typeMap as $propertyValue => $className) { $oneOfSchema = new OA\Schema([]); $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; } } }