The $options argument of Hydrator::hydrate() can contain:

  • parent object: On a nested call, this is a reference to the object containing the current object. This allows the application to link the current object to the parent if required.
  • source string: The form of the data in the $config argument. If missing, "json" is assumed. Accepted values are json, object, and yaml. If the option is "object" then the $config argument will be treated as the result of decoding the source data.
  • strict bool: Throw errors on any failure, otherwise log for getErrors(). Defaults to true.

The application can pass any additional options by prefixing the index with an underscore. These will be passed through unchanged.

Using $options['parent]' and a custom option:

class A implements Hydratable
    private $customData;
    private ?B $parent = null;

    private static Hydrator $hydrator;

    public function hydrate($json, $options = []): bool
        $this->parent = $options['parent'] ?? null;
        $this->customData = $options['_custom'] ?? null;
        return self::$hydrator->hydrate($this, $json, $options);


Options and Nested Classes

Classes that only have their hydration method called by a parent class can assume that their $config argument has been decoded.

Classes that are both accessed directly and from another class without transforming the data can simply let Hydrator::hydrate() decide what to do. However, if the class is expanding a simplified form of the data it is advisable to ensure it has been decoded by first calling the Hydrator::decode() method. See simplification for an example of this.

Option Access in Properties

Most closures defined in a Property will receive a reference to the Property as an argument. Applications can retrieve the option context by calling the Property::getOptions() method.