Documentation

QueryComposeMode
in package

Table of Contents

Cases

Compatible
Pre-PHP 8.4 Mode.
EnumCompatible
PHP 8.4+ mode.
EnumLenient
PHP 8.4+ enum-compatible lenient mode.
Native
Use PHP version http_build_query algorithm.
Safe
Validation-first mode.

Cases

Compatible

Pre-PHP 8.4 Mode.

Strictly uses get_object_vars on objects (Enum included) If the value can not be serialized the entry is skipped.

ie http_build_query behavior before PHP8.4

EnumLenient

PHP 8.4+ enum-compatible lenient mode.

Provides stable support for BackedEnum values. UnitEnum values are skipped. Uses get_object_vars() for non-enum objects. Unserializable values are skipped.

Behaves like QueryComposeMode::EnumCompatible but does not throw for UnitEnum values.

Mirrors http_build_query behavior in PHP 8.4+, except that error cases are silently ignored instead of throwing.

This mode is tolerant by design and skips entries that would otherwise result in an exception in QueryComposeMode::EnumCompatible.

EnumCompatible

PHP 8.4+ mode.

Provides stable support for BackedEnum values. Throws for UnitEnum. Uses get_object_vars() for non-enum objects. Unserializable values are skipped.

http_build_query behavior in PHP 8.4+.

Native

Use PHP version http_build_query algorithm.

In pre-PHP8.4 you get the same results as Compatible In PHP PHP8.4+ you get the same results as EnumCompatible

Safe

Validation-first mode.

Guarantees that only scalar values, BackedEnum, and null are accepted. Any object, UnitEnum, resource, or recursive structure results in an exception.

  • null: the key name is used but the separator and its content are omitted
  • string: used as-is
  • bool: converted to string “0” (false) or “1” (true)
  • int: converted to numeric string (123 -> “123”)
  • float: converted to decimal string (3.14 -> “3.14”)
  • Backed Enum: converted to their backing value and then stringify see int and string
  • array: empty array: An empty array has zero items, therefore empty arrays are omitted from the query parameter list.
    • lists: Becomes a repeated name suffixed with empty brackets (ie "a" with ["foo", false, 1.23] will result in a[]=foo&a[]=0&a[]=1.23)
    • maps: Becomes a repeated name suffixed with brackets containing the key (ie "a" with ["b" => "foo", "c" => false, "d" => 1.23] will result in a[b]=foo&a[c]=0&a[d]=1.23)

This contract is stable and independent of PHP's http_build_query implementation.


        
On this page

Search results