Skip to content

Latest commit

 

History

History
90 lines (67 loc) · 3.41 KB

File metadata and controls

90 lines (67 loc) · 3.41 KB

Any Of

The anyOf keyword can be used to combine multiple subschemas. The provided value must be valid against at least one of the subschemas.

{
    "$id": "example",
    "type": "object",
    "properties": {
        "example": {
            "anyOf": [
                {
                    "type": "number",
                    "multipleOf": 5
                },
                {
                    "type": "number",
                    "multipleOf": 3
                }
            ]
        }
    }
}

Valid values are eg. 3, 5, 6, 9, 10, 12, 15. Invalid values are eg. 1, 2, 4, 7, 8, 11 or any non numeric values.

Generated interface:

public function setExample(float $example): static;
public function getExample(): float;

Possible exception (if a string is provided):

Invalid value for example declined by composition constraint.
  Requires to match at least one composition element.
  - Composition element #1: Failed
    * Invalid type for example. Requires float, got string
  - Composition element #2: Failed
    * Invalid type for example. Requires float, got string

The thrown exception will be a PHPModelGenerator\Exception\ComposedValue\AnyOfException which provides the following methods to get further error details:

// returns a two-dimensional array which contains all validation exceptions grouped by composition elements
public function getCompositionErrorCollection(): array
// get the amount of succeeded composition elements
public function getSucceededCompositionElements(): int
// get the name of the property which failed
public function getPropertyName(): string
// get the value provided to the property
public function getProvidedValue()

Note

anyOf branches can be the boolean literals true or false.

  • true branch — always satisfies the branch; treated as an empty schema.
  • false branch — can never be satisfied; always-failing branches participate in the composition but never succeed. If all branches are false, any provided value raises an AnyOfException at runtime, and the generator emits a warning at generation time. Absent optional properties are still allowed.

Hint

When combining multiple nested objects with an anyOf composition a merged property will be generated

Note

When a property is also defined in the root properties section, the root type definition is authoritative. anyOf branches may add further constraints but will not widen the property's type. When branches define the same property with different types, the generator widens the property to a union type. See Cross-typed compositions for the full explanation including nullability rules and the allOf contrast.

Note

For object-level anyOf compositions, when a property appears in the required array of every branch, the generator promotes that property to non-nullable in the generated class. Because at least one branch must apply and all branches guarantee the property's presence, the getter can safely be non-nullable. See Cross-typed compositions for the full promotion rules.