class OptionsResolver implements Options

Validates options and merges them with default values.

Methods

setDefault(string $option, mixed $value)

Sets the default value of a given option.

setDefaults(array $defaults)

Sets a list of default values.

bool
hasDefault(string $option)

Returns whether a default value is set for an option.

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.

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.

setNormalizer(string $option, Closure $normalizer)

Sets the normalizer for an option.

setAllowedValues(string $option, mixed $allowedValues)

Sets allowed values for an option.

addAllowedValues(string $option, mixed $allowedValues)

Adds allowed values for an option.

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

Sets allowed types for an option.

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

Adds allowed types for an option.

remove(string|string[] $optionNames)

Removes the option with the given name.

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

at line line 152
OptionsResolver 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.

Parameters

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

Return Value

OptionsResolver This instance

Exceptions

AccessException If called from a lazy option or normalizer

at line line 215
OptionsResolver setDefaults(array $defaults)

Sets a list of default values.

Parameters

array $defaults The default values to set

Return Value

OptionsResolver This instance

Exceptions

AccessException If called from a lazy option or normalizer

at line line 234
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

at line line 248
OptionsResolver setRequired(string|string[] $optionNames)

Marks one or more options as required.

Parameters

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

Return Value

OptionsResolver This instance

Exceptions

AccessException If called from a lazy option or normalizer

at line line 271
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

at line line 283
string[] getRequiredOptions()

Returns the names of all required options.

Return Value

string[] The names of the required options

See also

isRequired()

at line line 299
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

at line line 311
string[] getMissingOptions()

Returns the names of all options missing a default value.

Return Value

string[] The names of the missing options

See also

isMissing()

at line line 329
OptionsResolver 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

OptionsResolver This instance

Exceptions

AccessException If called from a lazy option or normalizer

at line line 352
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

at line line 364
string[] getDefinedOptions()

Returns the names of all defined options.

Return Value

string[] The names of the defined options

See also

isDefined()

at line line 397
OptionsResolver setNormalizer(string $option, Closure $normalizer)

Sets the normalizer for an option.

The normalizer should be a closure with the following signature:

php 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

OptionsResolver This instance

Exceptions

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

at line line 440
OptionsResolver 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

OptionsResolver This instance

Exceptions

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

at line line 485
OptionsResolver 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

OptionsResolver This instance

Exceptions

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

at line line 530
OptionsResolver 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

OptionsResolver This instance

Exceptions

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

at line line 569
OptionsResolver 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

OptionsResolver This instance

Exceptions

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

at line line 606
OptionsResolver 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

OptionsResolver This instance

Exceptions

AccessException If called from a lazy option or normalizer

at line line 627
OptionsResolver clear()

Removes all options.

Return Value

OptionsResolver This instance

Exceptions

AccessException If called from a lazy option or normalizer

at line line 669
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

at line line 737
mixed offsetGet(string $option)

Returns the resolved value of an option.

Parameters

string $option The option name

Return Value

mixed The option value

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

at line line 909
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

\ArrayAccess::offsetExists()

at line line 923
offsetSet($option, $value)

Not supported.

Parameters

$option
$value

Exceptions

AccessException

at line line 933
offsetUnset($option)

Not supported.

Parameters

$option

Exceptions

AccessException

at line line 949
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

\Countable::count()