PluginProbe
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot / 4.5.0
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot v4.5.0
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 / Invoker / FactoryParameterResolver.php

FactoryParameterResolver.php in BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot 4.5.0, at includes/Dependencies/DI/Invoker/FactoryParameterResolver.php

64 lines 2.2 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 WPDeveloper\BetterDocs\Dependencies\DI\Invoker;
6
7 use WPDeveloper\BetterDocs\Dependencies\Invoker\ParameterResolver\ParameterResolver;
8 use WPDeveloper\BetterDocs\Dependencies\Psr\Container\ContainerInterface;
9 use ReflectionFunctionAbstract;
10
11 /**
12 * Inject the container, the definition or any other service using type-hints.
13 *
14 * {@internal This class is similar to TypeHintingResolver and TypeHintingContainerResolver,
15 * we use this instead for performance reasons}
16 *
17 * @author Quim Calpe <quim@kalpe.com>
18 * @author Matthieu Napoli <matthieu@mnapoli.fr>
19 */
20 class FactoryParameterResolver implements ParameterResolver
21 {
22 /**
23 * @var ContainerInterface
24 */
25 private $container;
26
27 public function __construct(ContainerInterface $container)
28 {
29 $this->container = $container;
30 }
31
32 public function getParameters(
33 ReflectionFunctionAbstract $reflection,
34 array $providedParameters,
35 array $resolvedParameters
36 ) : array {
37 $parameters = $reflection->getParameters();
38
39 // Skip parameters already resolved
40 if (! empty($resolvedParameters)) {
41 $parameters = array_diff_key($parameters, $resolvedParameters);
42 }
43
44 foreach ($parameters as $index => $parameter) {
45 $parameterClass = $parameter->getType() && !$parameter->getType()->isBuiltin() ? new \ReflectionClass($parameter->getType()->getName()) : null;
46
47 if (!$parameterClass) {
48 continue;
49 }
50
51 if ($parameterClass->name === 'WPDeveloper\BetterDocs\Dependencies\Psr\Container\ContainerInterface') {
52 $resolvedParameters[$index] = $this->container;
53 } elseif ($parameterClass->name === 'WPDeveloper\BetterDocs\Dependencies\DI\Factory\RequestedEntry') {
54 // By convention the second parameter is the definition
55 $resolvedParameters[$index] = $providedParameters[1];
56 } elseif ($this->container->has($parameterClass->name)) {
57 $resolvedParameters[$index] = $this->container->get($parameterClass->name);
58 }
59 }
60
61 return $resolvedParameters;
62 }
63 }
64