PluginProbe
The Innovative Form Builder – IvyForms / 0.2.1
The Innovative Form Builder – IvyForms v0.2.1
1.5.1 1.5 1.4.1 1.4 trunk 0.1.2 0.2 0.2.1 0.3 0.3.1 0.4 0.5 0.6 0.6.1 0.6.1-backup 0.6.1.1 0.7 0.8 0.8.1 0.8.2 0.9 0.9.1 1.0 1.1 1.1.1 All 27 releases
ivyforms / backend / vendor / php-di / php-di / src / Invoker / DefinitionParameterResolver.php

DefinitionParameterResolver.php in The Innovative Form Builder – IvyForms 0.2.1, at backend/vendor/php-di/php-di/src/Invoker/DefinitionParameterResolver.php

70 lines 1.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 declare(strict_types=1);
4
5 namespace DI\Invoker;
6
7 use DI\Definition\Definition;
8 use DI\Definition\Helper\DefinitionHelper;
9 use DI\Definition\Resolver\DefinitionResolver;
10 use Invoker\ParameterResolver\ParameterResolver;
11 use ReflectionFunctionAbstract;
12
13 /**
14 * Resolves callable parameters using definitions.
15 *
16 * @since 5.0
17 * @author Matthieu Napoli <[email protected]>
18 */
19 class DefinitionParameterResolver implements ParameterResolver
20 {
21 /**
22 * @var DefinitionResolver
23 */
24 private $definitionResolver;
25
26 public function __construct(DefinitionResolver $definitionResolver)
27 {
28 $this->definitionResolver = $definitionResolver;
29 }
30
31 public function getParameters(
32 ReflectionFunctionAbstract $reflection,
33 array $providedParameters,
34 array $resolvedParameters
35 ) : array {
36 // Skip parameters already resolved
37 if (! empty($resolvedParameters)) {
38 $providedParameters = array_diff_key($providedParameters, $resolvedParameters);
39 }
40
41 foreach ($providedParameters as $key => $value) {
42 if ($value instanceof DefinitionHelper) {
43 $value = $value->getDefinition('');
44 }
45
46 if (! $value instanceof Definition) {
47 continue;
48 }
49
50 $value = $this->definitionResolver->resolve($value);
51
52 if (is_int($key)) {
53 // Indexed by position
54 $resolvedParameters[$key] = $value;
55 } else {
56 // Indexed by parameter name
57 // TODO optimize?
58 $reflectionParameters = $reflection->getParameters();
59 foreach ($reflectionParameters as $reflectionParameter) {
60 if ($key === $reflectionParameter->name) {
61 $resolvedParameters[$reflectionParameter->getPosition()] = $value;
62 }
63 }
64 }
65 }
66
67 return $resolvedParameters;
68 }
69 }
70