Final Class Yiisoft\Definitions\Helpers\Normalizer
| Inheritance | Yiisoft\Definitions\Helpers\Normalizer |
|---|
Normalizer definition from configuration to an instance of {@see DefinitionInterface}.
Public Methods
| Method | Description | Defined By |
|---|---|---|
| normalize() | Normalize definition to an instance of {@see DefinitionInterface}. | Yiisoft\Definitions\Helpers\Normalizer |
Method Details
Normalize definition to an instance of {@see DefinitionInterface}.
Definition may be defined multiple ways:
- class name,
- string as reference to another class or alias,
- instance of {@see \Yiisoft\Definitions\Contract\ReferenceInterface},
- callable,
- array,
- ready object.
| public static Yiisoft\Definitions\Contract\DefinitionInterface normalize ( mixed $definition, string|null $class = null ) | ||
| $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.
|
| 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));
}
Signup or Login in order to comment.