0 follower

Final Class Yiisoft\Hydrator\Internal\ConstructorArgumentsExtractor

InheritanceYiisoft\Hydrator\Internal\ConstructorArgumentsExtractor

Method Details

Hide inherited methods

__construct() public method

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,
) {
}

            
extract() public method

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];
}