createFrom() public static method

Returns the existing instance if is an object or create a new one otherwise. It also ensure that the key will be added also it won't increment the counter if already present.
public static createFrom ( self $resolving = null, string $key ) : self
$resolving self
$key string
return self
Example #1
0
 /**
  * {@inheritdoc}
  *
  * @param Parameter $parameter
  *
  * @throws ParameterNotFoundException
  */
 public function resolve(Parameter $parameter, ParameterBag $unresolvedParameters, ParameterBag $resolvedParameters, ResolvingContext $context = null) : ParameterBag
 {
     $context = ResolvingContext::createFrom($context, $parameter->getKey());
     $self = $this;
     $value = preg_replace_callback(self::PATTERN, function ($match) use($self, $context, $unresolvedParameters, &$resolvedParameters, $parameter) {
         $key = $match['parameter'];
         $resolvedParameters = $self->resolveStringKey($self->resolver, $parameter, $key, $unresolvedParameters, $resolvedParameters, $context);
         return $resolvedParameters->get($key);
     }, $parameter->getValue());
     return $resolvedParameters->with($parameter->withValue($value));
 }
Example #2
0
 public function testFactoryMethodCannotTriggerACircularReference()
 {
     $context = new ResolvingContext('foo');
     $context->checkForCircularReference('foo');
     $context = ResolvingContext::createFrom($context, 'foo');
     $context->checkForCircularReference('foo');
     $context = ResolvingContext::createFrom($context, 'foo');
     $context->checkForCircularReference('foo');
     $context->add('foo');
     try {
         $context->checkForCircularReference('foo');
         $this->fail('Expected exception to be thrown.');
     } catch (CircularReferenceException $exception) {
         // Expected result
     }
 }
Example #3
0
 /**
  * @inheritdoc
  */
 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;
 }