Final Class Yiisoft\Hydrator\Internal\ConstructorArgumentsExtractor
| Inheritance | Yiisoft\Hydrator\Internal\ConstructorArgumentsExtractor |
|---|
Public Methods
| Method | Description | Defined By |
|---|---|---|
| __construct() | Yiisoft\Hydrator\Internal\ConstructorArgumentsExtractor | |
| extract() | Yiisoft\Hydrator\Internal\ConstructorArgumentsExtractor |
Method Details
| public mixed __construct ( Yiisoft\Hydrator\Hydrator $hydrator, Yiisoft\Hydrator\AttributeHandling\ParameterAttributesHandler $parameterAttributesHandler, Yiisoft\Hydrator\TypeCaster\TypeCasterInterface $typeCaster ) | ||
| $hydrator | Yiisoft\Hydrator\Hydrator | |
| $parameterAttributesHandler | Yiisoft\Hydrator\AttributeHandling\ParameterAttributesHandler | |
| $typeCaster | Yiisoft\Hydrator\TypeCaster\TypeCasterInterface | |
public function __construct(
private Hydrator $hydrator,
private ParameterAttributesHandler $parameterAttributesHandler,
private TypeCasterInterface $typeCaster,
) {
}
| public array extract ( ReflectionMethod|null $constructor, Yiisoft\Hydrator\DataInterface $data ) | ||
| $constructor | ReflectionMethod|null | |
| $data | Yiisoft\Hydrator\DataInterface | |
public function extract(?ReflectionMethod $constructor, DataInterface $data): array
{
$excludeParameterNames = [];
$constructorArguments = [];
if ($constructor === null) {
return [$excludeParameterNames, $constructorArguments];
}
$reflectionParameters = ReflectionFilter::filterParameters($constructor->getParameters());
foreach ($reflectionParameters as $parameterName => $parameter) {
$resolveResult = Result::fail();
if ($parameter->isPromoted()) {
$excludeParameterNames[] = $parameterName;
$resolveResult = $data->getValue($parameterName);
}
$attributesHandleResult = $this->parameterAttributesHandler->handle(
$parameter,
$resolveResult,
$data,
);
if ($attributesHandleResult->isResolved()) {
$resolveResult = $attributesHandleResult;
}
if ($resolveResult->isResolved()) {
$typeCastedValue = $this->typeCaster->cast(
$resolveResult->getValue(),
new TypeCastContext($this->hydrator, $parameter),
);
if ($typeCastedValue->isResolved()) {
$constructorArguments[$parameterName] = $typeCastedValue->getValue();
}
}
}
return [$excludeParameterNames, $constructorArguments];
}
Signup or Login in order to comment.