PluginProbe
Cookiebot by Usercentrics – Automatic Cookie Banner for GDPR/CCPA & Google Consent Mode / 3.10.1
Cookiebot by Usercentrics – Automatic Cookie Banner for GDPR/CCPA & Google Consent Mode v3.10.1
4.7.4 4.7.5 4.7.3 4.7.2 4.7.1 trunk 2.3.0 2.4.0 2.4.1 2.4.2 2.5.0 3.0.0 3.0.1 3.1.0 3.10.0 3.10.1 3.11.1 3.11.2 3.11.3 3.2.0 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 All 95 releases
cookiebot / addons / inc / Dependencies / DI / Definition / Resolver / ArrayResolver.php

ArrayResolver.php in Cookiebot by Usercentrics – Automatic Cookie Banner for GDPR/CCPA & Google Consent Mode 3.10.1, at addons/inc/Dependencies/DI/Definition/Resolver/ArrayResolver.php

106 lines 2.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * PHP-DI
4 *
5 * @link http://mnapoli.github.com/PHP-DI/
6 * @copyright Matthieu Napoli (http://mnapoli.fr/)
7 * @license http://www.opensource.org/licenses/mit-license.php MIT (see the LICENSE file)
8 */
9
10 namespace Cybot\Dependencies\DI\Definition\Resolver;
11
12 use Cybot\Dependencies\DI\Definition\ArrayDefinition;
13 use Cybot\Dependencies\DI\Definition\Definition;
14 use Cybot\Dependencies\DI\Definition\Helper\DefinitionHelper;
15 use Cybot\Dependencies\DI\DependencyException;
16 use Exception;
17
18 /**
19 * Resolves an array definition to a value.
20 *
21 * @since 5.0
22 * @author Matthieu Napoli <[email protected]>
23 */
24 class ArrayResolver implements DefinitionResolver
25 {
26 /**
27 * @var DefinitionResolver
28 */
29 private $definitionResolver;
30
31 /**
32 * @param DefinitionResolver $definitionResolver Used to resolve nested definitions.
33 */
34 public function __construct(DefinitionResolver $definitionResolver)
35 {
36 $this->definitionResolver = $definitionResolver;
37 }
38
39 /**
40 * Resolve an array definition to a value.
41 *
42 * An array definition can contain simple values or references to other entries.
43 *
44 * @param ArrayDefinition $definition
45 *
46 * {@inheritdoc}
47 */
48 public function resolve(Definition $definition, array $parameters = [])
49 {
50 $this->assertIsArrayDefinition($definition);
51
52 $values = $definition->getValues();
53
54 $values = $this->resolveNestedDefinitions($definition, $values);
55
56 return $values;
57 }
58
59 /**
60 * {@inheritdoc}
61 */
62 public function isResolvable(Definition $definition, array $parameters = [])
63 {
64 $this->assertIsArrayDefinition($definition);
65
66 return true;
67 }
68
69 private function assertIsArrayDefinition(Definition $definition)
70 {
71 if (!$definition instanceof ArrayDefinition) {
72 throw new \InvalidArgumentException(sprintf(
73 'This definition resolver is only compatible with ArrayDefinition objects, %s given',
74 get_class($definition)
75 ));
76 }
77 }
78
79 private function resolveNestedDefinitions(ArrayDefinition $definition, array $values)
80 {
81 foreach ($values as $key => $value) {
82 if ($value instanceof DefinitionHelper) {
83 $values[$key] = $this->resolveDefinition($value, $definition, $key);
84 }
85 }
86
87 return $values;
88 }
89
90 private function resolveDefinition(DefinitionHelper $value, ArrayDefinition $definition, $key)
91 {
92 try {
93 return $this->definitionResolver->resolve($value->getDefinition(''));
94 } catch (DependencyException $e) {
95 throw $e;
96 } catch (Exception $e) {
97 throw new DependencyException(sprintf(
98 "Error while resolving %s[%s]. %s",
99 $definition->getName(),
100 $key,
101 $e->getMessage()
102 ), 0, $e);
103 }
104 }
105 }
106