Skip to main content

Property Types

Apivalk provides several built-in property classes:

Base Configuration

All properties share a common set of configuration methods:
  • setIsRequired(bool $required): Whether the property must be present.
  • setExample(string $example): A sample value for OpenAPI documentation.
  • addValidator(AbstractValidator $validator): Add custom validation logic.

Specific Features

StringProperty

  • setMinLength(int) / setMaxLength(int)
  • setPattern(string): Regex validation.

EnumProperty

Restricts a string value to a predefined set of allowed values. The enum values are passed as the third constructor argument.
  • setEnums(array): Update the list of allowed values.
  • setDefault(string): Set a default value.

IntegerProperty

For whole numbers. Supports int32 and int64 formats (default: int64).
  • setMinimumValue(int) / setMaximumValue(int)
  • setIsExclusiveMinimum(bool) / setIsExclusiveMaximum(bool)
  • setFormat(string): IntegerProperty::FORMAT_INT32 or IntegerProperty::FORMAT_INT64.

FloatProperty

For decimal numbers. Supports float and double formats (default: double).
  • setMinimumValue(float) / setMaximumValue(float)
  • setIsExclusiveMinimum(bool) / setIsExclusiveMaximum(bool)
  • setFormat(string): FloatProperty::FORMAT_FLOAT or FloatProperty::FORMAT_DOUBLE.

DateProperty

Represents a date value in YYYY-MM-DD format. Automatically sets the OpenAPI format to date and includes a built-in pattern.
  • setDefault(string): Set a default date value.

DateTimeProperty

Represents a date-time value in ISO 8601 / RFC 3339 format. Automatically sets the OpenAPI format to date-time and includes a built-in pattern.
  • setDefault(string): Set a default date-time value.

ByteProperty

For base64-encoded data. Automatically sets the OpenAPI format to byte.
  • setMinLength(int) / setMaxLength(int)
  • setPattern(string): Regex validation.

BinaryProperty

For raw binary data (e.g., file uploads). Automatically sets the OpenAPI format to binary.
  • setMinLength(int) / setMaxLength(int)
  • setPattern(string): Regex validation.
BinaryProperty describes binary data inside the request body. For an actual multipart/form-data upload use FileProperty — body properties are never populated from $_FILES.

FileProperty

For files uploaded as multipart/form-data. Unlike every other property the value does not live in a parameter bag but in the request’s file bag, so it is declared with addFileProperty() and validated by the FileValidator. Declaring at least one file property also switches the generated OpenAPI request body to multipart/form-data.
  • setMaxSizeInBytes(?int): Rejects larger uploads with file_is_larger_than_max_size.
  • setAllowedMediaTypes(string[]): Whitelist of media types. The type is detected from the file contents, the client supplied Content-Type is never trusted. An empty list accepts every type.
Declared file properties are picked up by the DocBlock generator, which adds a file() shape to the request just like the body, query and path shapes. In the controller the file is then read from the file bag with typed access:

SimpleArrayProperty

For one-dimensional arrays of scalar values (e.g. ["ids" => [23, 41, 22]]). Unlike ArrayProperty, it does not require an AbstractObjectProperty — you only declare the scalar item type, which is what gets written into the OpenAPI items schema. The item type is passed as the third constructor argument:
  • SimpleArrayProperty::TYPE_INT → OpenAPI integer, casts elements to int
  • SimpleArrayProperty::TYPE_STRING → OpenAPI string, casts elements to string (default)
  • SimpleArrayProperty::TYPE_NUMBER → OpenAPI number, casts elements to float
  • SimpleArrayProperty::TYPE_BOOL → OpenAPI boolean, casts elements to bool
setItemType(string) can also change the type after construction.
In your response that backs:
Each element is validated against the declared item type (a non-numeric element in an int array yields a 422), and the value read back in the controller is cast to the item type — ["1", "2"] on the wire becomes [1, 2]. Use ArrayProperty when the list holds objects rather than scalars.

ArrayProperty

  • setItemProperty(AbstractProperty): Defines the type of items within the array.

AbstractObjectProperty

  • Used to define nested schemas. You extend this class and implement the getPropertyCollection() method to define the nested properties.

Validation Integration

When a property is instantiated, it automatically creates a corresponding validator via the ValidatorFactory. This validator is used by the RequestValidationMiddleware to ensure incoming data matches your definitions. Each property type has its own dedicated validator (e.g., StringValidator, IntegerValidator, FloatValidator, EnumValidator, DateValidator, DateTimeValidator, ByteValidator, BinaryValidator, SimpleArrayValidator), ensuring type-specific validation rules are applied automatically. SimpleArrayValidator additionally checks that every element matches the array’s declared item type.