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 / StringResolver.php

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

96 lines 2.7 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\Definition;
13 use Cybot\Dependencies\DI\Definition\StringDefinition;
14 use Cybot\Dependencies\DI\DependencyException;
15 use Cybot\Dependencies\DI\NotFoundException;
16 use Cybot\Dependencies\Interop\Container\ContainerInterface;
17
18 /**
19 * Resolves a string expression.
20 *
21 * @since 5.0
22 * @author Matthieu Napoli <[email protected]>
23 */
24 class StringResolver implements DefinitionResolver
25 {
26 /**
27 * @var ContainerInterface
28 */
29 private $container;
30
31 /**
32 * The resolver needs a container.
33 * This container will be used to get the entry to which the alias points to.
34 *
35 * @param ContainerInterface $container
36 */
37 public function __construct(ContainerInterface $container)
38 {
39 $this->container = $container;
40 }
41
42 /**
43 * Resolve a value definition to a value.
44 *
45 * A value definition is simple, so this will just return the value of the ValueDefinition.
46 *
47 * @param StringDefinition $definition
48 *
49 * {@inheritdoc}
50 */
51 public function resolve(Definition $definition, array $parameters = [])
52 {
53 $this->assertIsStringDefinition($definition);
54
55 $expression = $definition->getExpression();
56
57 $result = preg_replace_callback('#\{([^\{\}]+)\}#', function (array $matches) use ($definition) {
58 try {
59 return $this->container->get($matches[1]);
60 } catch (NotFoundException $e) {
61 throw new DependencyException(sprintf(
62 "Error while parsing string expression for entry '%s': %s",
63 $definition->getName(),
64 $e->getMessage()
65 ), 0, $e);
66 }
67 }, $expression);
68
69 if ($result === null) {
70 throw new \RuntimeException(sprintf('An unknown error occurred while parsing the string definition: \'%s\'', $expression));
71 }
72
73 return $result;
74 }
75
76 /**
77 * {@inheritdoc}
78 */
79 public function isResolvable(Definition $definition, array $parameters = [])
80 {
81 $this->assertIsStringDefinition($definition);
82
83 return true;
84 }
85
86 private function assertIsStringDefinition(Definition $definition)
87 {
88 if (!$definition instanceof StringDefinition) {
89 throw new \InvalidArgumentException(sprintf(
90 'This definition resolver is only compatible with StringDefinition objects, %s given',
91 get_class($definition)
92 ));
93 }
94 }
95 }
96