PluginProbe
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot / 4.8.2
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot v4.8.2
4.9.1 4.9.0 4.8.2 4.8.1 4.8.0 4.7.0 4.6.2 4.6.1 4.6.0 4.5.6 4.5.5 4.5.4 4.5.3 4.5.2 4.5.1 4.5.0 4.4.1 4.4.0 3.3.4 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.5.2 All 199 releases
betterdocs / includes / Dependencies / DI / Definition / Resolver / ArrayResolver.php

ArrayResolver.php in BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot 4.8.2, at includes/Dependencies/DI/Definition/Resolver/ArrayResolver.php

78 lines 2.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 // phpcs:ignoreFile -- Bundled third-party (Mozart) dependency; exempt from plugin coding standards.
3
4 declare(strict_types=1);
5
6 namespace WPDeveloper\BetterDocs\Dependencies\DI\Definition\Resolver;
7
8 use WPDeveloper\BetterDocs\Dependencies\DI\Definition\ArrayDefinition;
9 use WPDeveloper\BetterDocs\Dependencies\DI\Definition\Definition;
10 use WPDeveloper\BetterDocs\Dependencies\DI\DependencyException;
11 use Exception;
12
13 /**
14 * Resolves an array definition to a value.
15 *
16 * @since 5.0
17 * @author Matthieu Napoli <matthieu@mnapoli.fr>
18 */
19 class ArrayResolver implements DefinitionResolver
20 {
21 /**
22 * @var DefinitionResolver
23 */
24 private $definitionResolver;
25
26 /**
27 * @param DefinitionResolver $definitionResolver Used to resolve nested definitions.
28 */
29 public function __construct(DefinitionResolver $definitionResolver)
30 {
31 $this->definitionResolver = $definitionResolver;
32 }
33
34 /**
35 * Resolve an array definition to a value.
36 *
37 * An array definition can contain simple values or references to other entries.
38 *
39 * {@inheritdoc}
40 *
41 * @param ArrayDefinition $definition
42 */
43 public function resolve(Definition $definition, array $parameters = []) : array
44 {
45 $values = $definition->getValues();
46
47 // Resolve nested definitions
48 array_walk_recursive($values, function (&$value, $key) use ($definition) {
49 if ($value instanceof Definition) {
50 $value = $this->resolveDefinition($value, $definition, $key);
51 }
52 });
53
54 return $values;
55 }
56
57 public function isResolvable(Definition $definition, array $parameters = []) : bool
58 {
59 return true;
60 }
61
62 private function resolveDefinition(Definition $value, ArrayDefinition $definition, $key)
63 {
64 try {
65 return $this->definitionResolver->resolve($value);
66 } catch (DependencyException $e) {
67 throw $e;
68 } catch (Exception $e) {
69 throw new DependencyException(sprintf(
70 'Error while resolving %s[%s]. %s',
71 $definition->getName(),
72 $key,
73 $e->getMessage()
74 ), 0, $e);
75 }
76 }
77 }
78