class OptionsResolver implements Options

Validates options and merges them with default values.

Methods

$this
setDefault(string $option, mixed $value)

Sets the default value of a given option.

$this
setDefaults(array $defaults)

Sets a list of default values.

bool
hasDefault(string $option)

Returns whether a default value is set for an option.

$this
setRequired(string|string[] $optionNames)

Marks one or more options as required.

bool
isRequired(string $option)

Returns whether an option is required.

string[]
getRequiredOptions()

Returns the names of all required options.

bool
isMissing(string $option)

Returns whether an option is missing a default value.

string[]
getMissingOptions()

Returns the names of all options missing a default value.

$this
setDefined(string|string[] $optionNames)

Defines a valid option name.

bool
isDefined(string $option)

Returns whether an option is defined.

string[]
getDefinedOptions()

Returns the names of all defined options.

bool
isNested(string $option)

No description

setDeprecated(string $option, $deprecationMessage = 'The option "%name%" is deprecated.')

Deprecates an option, allowed types or values.

bool
isDeprecated(string $option)

No description

$this
setNormalizer(string $option, Closure $normalizer)

Sets the normalizer for an option.

$this
setAllowedValues(string $option, mixed $allowedValues)

Sets allowed values for an option.

$this
addAllowedValues(string $option, mixed $allowedValues)

Adds allowed values for an option.

$this
setAllowedTypes(string $option, string|string[] $allowedTypes)

Sets allowed types for an option.

$this
addAllowedTypes(string $option, string|string[] $allowedTypes)

Adds allowed types for an option.

$this
remove(string|string[] $optionNames)

Removes the option with the given name.

$this
clear()

Removes all options.

array
resolve(array $options = array())

Merges options with the default values stored in the container and validates them.

mixed
offsetGet(string $option)

Returns the resolved value of an option.

bool
offsetExists(string $option)

Returns whether a resolved option with the given name exists.

offsetSet($option, $value)

Not supported.

offsetUnset($option)

Not supported.

int
count()

Returns the number of set options.

Details

$this setDefault(string $option, mixed $value)

Sets the default value of a given option.

If the default value should be set based on other options, you can pass a closure with the following signature:

function (Options $options) {
    // ...
}

The closure will be evaluated when {@link resolve()} is called. The closure has access to the resolved values of other options through the passed {@link Options} instance:

function (Options $options) {
    if (isset($options['port'])) {
        // ...
    }
}

If you want to access the previously set default value, add a second argument to the closure's signature:

$options->setDefault('name', 'Default Name');

$options->setDefault('name', function (Options $options, $previousValue) {
    // 'Default Name' === $previousValue
});

This is mostly useful if the configuration of the {@link Options} object is spread across different locations of your code, such as base and sub-classes.

If you want to define nested options, you can pass a closure with the following signature:

$options->setDefault('database', function (OptionsResolver $resolver) {
    $resolver->setDefined(array('dbname', 'host', 'port', 'user', 'pass'));
}

To get access to the parent options, add a second argument to the closure's signature:

function (OptionsResolver $resolver, Options $parent) {
    // 'default' === $parent['connection']
}

Parameters

string $option The name of the option
mixed $value The default value of the option

Return Value

$this

Exceptions

AccessException If called from a lazy option or normalizer

$this setDefaults(array $defaults)

Sets a list of default values.

Parameters

array $defaults The default values to set

Return Value

$this

Exceptions

AccessException If called from a lazy option or normalizer

bool hasDefault(string $option)

Returns whether a default value is set for an option.

Returns true if {@link setDefault()} was called for this option. An option is also considered set if it was set to null.

Parameters

string $option The option name

Return Value

bool Whether a default value is set

$this setRequired(string|string[] $optionNames)

Marks one or more options as required.

Parameters

string|string[] $optionNames One or more option names

Return Value

$this

Exceptions

AccessException If called from a lazy option or normalizer

bool isRequired(string $option)

Returns whether an option is required.

An option is required if it was passed to {@link setRequired()}.

Parameters

string $option The name of the option

Return Value

bool Whether the option is required

string[] getRequiredOptions()

Returns the names of all required options.

Return Value

string[] The names of the required options

See also

bool isMissing(string $option)

Returns whether an option is missing a default value.

An option is missing if it was passed to {@link setRequired()}, but not to {@link setDefault()}. This option must be passed explicitly to {@link resolve()}, otherwise an exception will be thrown.

Parameters

string $option The name of the option

Return Value

bool Whether the option is missing

string[] getMissingOptions()

Returns the names of all options missing a default value.

Return Value

string[] The names of the missing options

See also

$this setDefined(string|string[] $optionNames)

Defines a valid option name.

Defines an option name without setting a default value. The option will be accepted when passed to {@link resolve()}. When not passed, the option will not be included in the resolved options.

Parameters

string|string[] $optionNames One or more option names

Return Value

$this

Exceptions

AccessException If called from a lazy option or normalizer

bool isDefined(string $option)

Returns whether an option is defined.

Returns true for any option passed to {@link setDefault()}, {@link setRequired()} or {@link setDefined()}.

Parameters

string $option The option name

Return Value

bool Whether the option is defined

string[] getDefinedOptions()

Returns the names of all defined options.

Return Value

string[] The names of the defined options

See also

bool isNested(string $option)

Parameters

string $option

Return Value

bool

OptionsResolver setDeprecated(string $option, $deprecationMessage = 'The option "%name%" is deprecated.')

Deprecates an option, allowed types or values.

Instead of passing the message, you may also pass a closure with the following signature:

function (Options $options, $value): string {
    // ...
}

The closure receives the value as argument and should return a string. Return an empty string to ignore the option deprecation.

The closure is invoked when {@link resolve()} is called. The parameter passed to the closure is the value of the option after validating it and before normalizing it.

Parameters

string $option
$deprecationMessage

Return Value

OptionsResolver

bool isDeprecated(string $option)

Parameters

string $option

Return Value

bool

$this setNormalizer(string $option, Closure $normalizer)

Sets the normalizer for an option.

The normalizer should be a closure with the following signature:

function (Options $options, $value) {
    // ...
}

The closure is invoked when {@link resolve()} is called. The closure has access to the resolved values of other options through the passed {@link Options} instance.

The second parameter passed to the closure is the value of the option.

The resolved option value is set to the return value of the closure.

Parameters

string $option The option name
Closure $normalizer The normalizer

Return Value

$this

Exceptions

UndefinedOptionsException If the option is undefined
AccessException If called from a lazy option or normalizer

$this setAllowedValues(string $option, mixed $allowedValues)

Sets allowed values for an option.

Instead of passing values, you may also pass a closures with the following signature:

function ($value) {
    // return true or false
}

The closure receives the value as argument and should return true to accept the value and false to reject the value.

Parameters

string $option The option name
mixed $allowedValues One or more acceptable values/closures

Return Value

$this

Exceptions

UndefinedOptionsException If the option is undefined
AccessException If called from a lazy option or normalizer

$this addAllowedValues(string $option, mixed $allowedValues)

Adds allowed values for an option.

The values are merged with the allowed values defined previously.

Instead of passing values, you may also pass a closures with the following signature:

function ($value) {
    // return true or false
}

The closure receives the value as argument and should return true to accept the value and false to reject the value.

Parameters

string $option The option name
mixed $allowedValues One or more acceptable values/closures

Return Value

$this

Exceptions

UndefinedOptionsException If the option is undefined
AccessException If called from a lazy option or normalizer

$this setAllowedTypes(string $option, string|string[] $allowedTypes)

Sets allowed types for an option.

Any type for which a corresponding is_() function exists is acceptable. Additionally, fully-qualified class or interface names may be passed.

Parameters

string $option The option name
string|string[] $allowedTypes One or more accepted types

Return Value

$this

Exceptions

UndefinedOptionsException If the option is undefined
AccessException If called from a lazy option or normalizer

$this addAllowedTypes(string $option, string|string[] $allowedTypes)

Adds allowed types for an option.

The types are merged with the allowed types defined previously.

Any type for which a corresponding is_() function exists is acceptable. Additionally, fully-qualified class or interface names may be passed.

Parameters

string $option The option name
string|string[] $allowedTypes One or more accepted types

Return Value

$this

Exceptions

UndefinedOptionsException If the option is undefined
AccessException If called from a lazy option or normalizer

$this remove(string|string[] $optionNames)

Removes the option with the given name.

Undefined options are ignored.

Parameters

string|string[] $optionNames One or more option names

Return Value

$this

Exceptions

AccessException If called from a lazy option or normalizer

$this clear()

Removes all options.

Return Value

$this

Exceptions

AccessException If called from a lazy option or normalizer

array resolve(array $options = array())

Merges options with the default values stored in the container and validates them.

Exceptions are thrown if:

  • Undefined options are passed;
  • Required options are missing;
  • Options have invalid types;
  • Options have invalid values.

Parameters

array $options A map of option names to values

Return Value

array The merged and validated options

Exceptions

UndefinedOptionsException If an option name is undefined
InvalidOptionsException If an option doesn't fulfill the specified validation rules
MissingOptionsException If a required option is missing
OptionDefinitionException If there is a cyclic dependency between lazy options and/or normalizers
NoSuchOptionException If a lazy option reads an unavailable option
AccessException If called from a lazy option or normalizer

mixed offsetGet(string $option)

Returns the resolved value of an option.

Parameters

string $option

Return Value

mixed

Exceptions

AccessException If accessing this method outside of {@link resolve()}
NoSuchOptionException If the option is not set
InvalidOptionsException If the option doesn't fulfill the specified validation rules
OptionDefinitionException If there is a cyclic dependency between lazy options and/or normalizers

bool offsetExists(string $option)

Returns whether a resolved option with the given name exists.

Parameters

string $option The option name

Return Value

bool Whether the option is set

Exceptions

AccessException If accessing this method outside of {@link resolve()}

See also

offsetSet($option, $value)

Not supported.

Parameters

$option
$value

Exceptions

AccessException

offsetUnset($option)

Not supported.

Parameters

$option

Exceptions

AccessException

int count()

Returns the number of set options.

This may be only a subset of the defined options.

Return Value

int Number of options

Exceptions

AccessException If accessing this method outside of {@link resolve()}

See also