Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
<?php
2
 
3
declare(strict_types=1);
4
 
5
namespace DI\Definition\Resolver;
6
 
7
use DI\Definition\Definition;
8
use DI\Definition\EnvironmentVariableDefinition;
9
use DI\Definition\Exception\InvalidDefinition;
10
 
11
/**
12
 * Resolves a environment variable definition to a value.
13
 *
14
 * @template-implements DefinitionResolver<EnvironmentVariableDefinition>
15
 *
16
 * @author James Harris <james.harris@icecave.com.au>
17
 */
18
class EnvironmentVariableResolver implements DefinitionResolver
19
{
20
    /** @var callable */
21
    private $variableReader;
22
 
23
    public function __construct(
24
        private DefinitionResolver $definitionResolver,
25
        $variableReader = null
26
    ) {
27
        $this->variableReader = $variableReader ?? [$this, 'getEnvVariable'];
28
    }
29
 
30
    /**
31
     * Resolve an environment variable definition to a value.
32
     *
33
     * @param EnvironmentVariableDefinition $definition
34
     */
35
    public function resolve(Definition $definition, array $parameters = []) : mixed
36
    {
37
        $value = call_user_func($this->variableReader, $definition->getVariableName());
38
 
39
        if (false !== $value) {
40
            return $value;
41
        }
42
 
43
        if (!$definition->isOptional()) {
44
            throw new InvalidDefinition(sprintf(
45
                "The environment variable '%s' has not been defined",
46
                $definition->getVariableName()
47
            ));
48
        }
49
 
50
        $value = $definition->getDefaultValue();
51
 
52
        // Nested definition
53
        if ($value instanceof Definition) {
54
            return $this->definitionResolver->resolve($value);
55
        }
56
 
57
        return $value;
58
    }
59
 
60
    public function isResolvable(Definition $definition, array $parameters = []) : bool
61
    {
62
        return true;
63
    }
64
 
65
    protected function getEnvVariable(string $variableName)
66
    {
67
        return $_ENV[$variableName] ?? $_SERVER[$variableName] ?? getenv($variableName);
68
    }
69
}