Nelmio\Alice\Generator\Resolver\Parameter\Chainable\ArrayParameterResolver::resolve PHP Method

resolve() public method

public resolve ( Parameter $unresolvedArrayParameter, ParameterBag $unresolvedParameters, ParameterBag $resolvedParameters, ResolvingContext $context = null ) : ParameterBag
$unresolvedArrayParameter Nelmio\Alice\Parameter
$unresolvedParameters Nelmio\Alice\ParameterBag
$resolvedParameters Nelmio\Alice\ParameterBag
$context Nelmio\Alice\Generator\Resolver\ResolvingContext
return Nelmio\Alice\ParameterBag
    public function resolve(Parameter $unresolvedArrayParameter, ParameterBag $unresolvedParameters, ParameterBag $resolvedParameters, ResolvingContext $context = null) : ParameterBag
    {
        if (null === $this->resolver) {
            throw ResolverNotFoundExceptionFactory::createUnexpectedCall(__METHOD__);
        }
        $context = ResolvingContext::createFrom($context, $unresolvedArrayParameter->getKey());
        $resolvedArray = [];
        /* @var array $unresolvedArray */
        $unresolvedArray = $unresolvedArrayParameter->getValue();
        foreach ($unresolvedArray as $index => $unresolvedValue) {
            // Iterate over all the values of the array to resolve each of them
            $resolvedParameters = $this->resolver->resolve(new Parameter((string) $index, $unresolvedValue), $unresolvedParameters, $resolvedParameters, $context);
            $resolvedArray[$index] = $resolvedParameters->get((string) $index);
            $resolvedParameters = $resolvedParameters->without((string) $index);
        }
        $resolvedParameters = $resolvedParameters->with($unresolvedArrayParameter->withValue($resolvedArray));
        return $resolvedParameters;
    }

Usage Example

 /**
  * @expectedException \Nelmio\Alice\Throwable\Exception\Generator\Resolver\ResolverNotFoundException
  * @expectedExceptionMessage Expected method "Nelmio\Alice\Generator\Resolver\Parameter\Chainable\ArrayParameterResolver::resolve" to be called only if it has a resolver.
  */
 public function testRequiresInjectedResolverToResolverAParameter()
 {
     $resolver = new ArrayParameterResolver();
     $resolver->resolve(new Parameter('foo', null), new ParameterBag(), new ParameterBag());
 }