Final Class Yiisoft\Hydrator\AttributeHandling\ResolverFactory\ReflectionAttributeResolverFactory
| Inheritance | Yiisoft\Hydrator\AttributeHandling\ResolverFactory\ReflectionAttributeResolverFactory |
|---|---|
| Implements | Yiisoft\Hydrator\AttributeHandling\ResolverFactory\AttributeResolverFactoryInterface |
A factory for attribute resolvers that are instantiable via reflection.
Public Methods
| Method | Description | Defined By |
|---|---|---|
| create() | Yiisoft\Hydrator\AttributeHandling\ResolverFactory\ReflectionAttributeResolverFactory |
Method Details
public function create(DataAttributeInterface|ParameterAttributeInterface $attribute): object
{
$resolver = $attribute->getResolver();
if (!is_string($resolver)) {
return $resolver;
}
if (!class_exists($resolver)) {
throw new AttributeResolverNonInstantiableException(
sprintf(
'Class "%s" does not exist.',
$resolver,
),
);
}
$reflectionClass = new ReflectionClass($resolver);
if ($reflectionClass->isAbstract()) {
throw new AttributeResolverNonInstantiableException(
sprintf(
'"%s" is not instantiable because it is abstract.',
$reflectionClass->getName(),
),
);
}
$constructor = $reflectionClass->getConstructor();
if ($constructor !== null) {
if (!$constructor->isPublic()) {
throw new AttributeResolverNonInstantiableException(
sprintf(
'Class "%s" is not instantiable because of non-public constructor.',
$constructor->getDeclaringClass()->getName(),
),
);
}
if ($constructor->getNumberOfRequiredParameters() > 0) {
throw new AttributeResolverNonInstantiableException(
sprintf(
'Class "%s" cannot be instantiated because it has %d required parameters in constructor.',
$constructor->getDeclaringClass()->getName(),
$constructor->getNumberOfRequiredParameters(),
)
);
}
}
return $reflectionClass->newInstance();
}
Signup or Login in order to comment.