0 follower

Final Class Yiisoft\Definitions\Helpers\Normalizer

InheritanceYiisoft\Definitions\Helpers\Normalizer

Normalizer definition from configuration to an instance of Yiisoft\Definitions\Contract\DefinitionInterface.

Public Methods

Hide inherited methods

Method Description Defined By
normalize() Normalize definition to an instance of Yiisoft\Definitions\Contract\DefinitionInterface. Yiisoft\Definitions\Helpers\Normalizer

Method Details

Hide inherited methods

normalize() public static method

Normalize definition to an instance of Yiisoft\Definitions\Contract\DefinitionInterface.

Definition may be defined multiple ways:

public static normalize( mixed $definition, string|null $class null ): Yiisoft\Definitions\Contract\DefinitionInterface
$definition mixed

The definition for normalization.

$class string|null

The class name of the object to be defined (optional). It is used in two cases.

  • The definition is a string, and class name equals to definition. Returned ArrayDefinition with defined class.
  • The definition is an array without class name. Class name will be added to array and ArrayDefinition will be returned.
return Yiisoft\Definitions\Contract\DefinitionInterface

Normalized definition as an object.

throws Yiisoft\Definitions\Exception\InvalidConfigException

If configuration is not valid.

                public static function normalize(mixed $definition, ?string $class = null): DefinitionInterface
{
    // Reference
    if ($definition instanceof ReferenceInterface) {
        return $definition;
    }
    if (is_string($definition)) {
        // Current class
        if (
            $class === $definition
            || ($class === null && class_exists($definition))
        ) {
            /** @psalm-var class-string $definition */
            return ArrayDefinition::fromPreparedData($definition);
        }
        // Reference to another class or alias
        return Reference::to($definition);
    }
    // Callable definition
    if (is_callable($definition, true)) {
        return new CallableDefinition($definition);
    }
    // Array definition
    if (is_array($definition)) {
        $config = $definition;
        if (!array_key_exists(ArrayDefinition::CLASS_NAME, $config)) {
            if ($class === null) {
                throw new InvalidConfigException(
                    'Array definition should contain the key "class": ' . var_export($definition, true),
                );
            }
            $config[ArrayDefinition::CLASS_NAME] = $class;
        }
        /** @psalm-var ArrayDefinitionConfig $config */
        return ArrayDefinition::fromConfig($config);
    }
    // Ready object
    if (is_object($definition) && !($definition instanceof DefinitionInterface)) {
        return new ValueDefinition($definition);
    }
    throw new InvalidConfigException('Invalid definition: ' . var_export($definition, true));
}