• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

Entropyphp / EntropyPHP / 16633232213

30 Jul 2025 08:37PM UTC coverage: 69.327% (+3.7%) from 65.586%
16633232213

push

github

willy68
First commit

0 of 2 new or added lines in 1 file covered. (0.0%)

278 of 401 relevant lines covered (69.33%)

2.71 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/src/Invoker/ResolverChainFactory.php
1
<?php
2

3
declare(strict_types=1);
4

5
namespace Entropy\Invoker;
6

7
use DI\Definition\Resolver\ResolverDispatcher;
8
use DI\NotFoundException;
9
use DI\Proxy\ProxyFactory;
10
use Entropy\Invoker\ParameterResolver\AssociativeArrayTypeHintResolver;
11
use Entropy\Utils\File\FileUtils;
12
use Psr\Container\ContainerExceptionInterface;
13
use Psr\Container\ContainerInterface;
14
use DI\Invoker\DefinitionParameterResolver;
15
use Invoker\ParameterResolver\ParameterResolver;
16
use Invoker\ParameterResolver\DefaultValueResolver;
17
use Invoker\ParameterResolver\NumericArrayResolver;
18
use Invoker\ParameterResolver\Container\TypeHintContainerResolver;
19

20
class ResolverChainFactory
21
{
22
    /**
23
     * @param ContainerInterface $container
24
     * @return ParameterResolver
25
     * @throws NotFoundException
26
     * @throws ContainerExceptionInterface
27
     */
28
    public function __invoke(ContainerInterface $container): ParameterResolver
×
29
    {
30
        $proxyDir = $this->getProxyDirectory($container);
×
31
        $definitionResolver = new ResolverDispatcher($container, new ProxyFactory($proxyDir));
×
32

33
        // Default resolvers
34
        $defaultResolvers = $this->getDefaultResolvers($container, $definitionResolver);
×
35

36
        // Custom resolvers
NEW
37
        $otherResolvers = $this->getCustomResolvers($container);
×
38

39
        return new ControllerParamsResolver(array_merge($otherResolvers, $defaultResolvers));
×
40
    }
41

42
    /**
43
     * @param ContainerInterface $container
44
     * @return string|null
45
     * @throws ContainerExceptionInterface
46
     */
47
    private function getProxyDirectory(ContainerInterface $container): ?string
×
48
    {
49
        if (!$container->has('env')) {
×
50
            return null;
×
51
        }
52

53
        $proxyDir = null;
×
54

55
        if ($container->get('env') === 'prod') {
×
56
            $projectDir = FileUtils::getProjectDir();
×
57
            $projectDir = realpath($projectDir) ?: $projectDir;
×
58
            $proxyDir = $container->has('proxy_dir') ? $container->get('proxy_dir') : null;
×
59
            $proxyDir = $proxyDir ? $projectDir . $proxyDir : null;
×
60
        }
61

62
        return $proxyDir;
×
63
    }
64

65
    /**
66
     * @param ContainerInterface $container
67
     * @param ResolverDispatcher $definitionResolver
68
     * @return array
69
     */
70
    private function getDefaultResolvers(ContainerInterface $container, ResolverDispatcher $definitionResolver): array
×
71
    {
72
        return [
×
73
            new DefinitionParameterResolver($definitionResolver),
×
74
            new NumericArrayResolver(),
×
75
            new AssociativeArrayTypeHintResolver(),
×
76
            new DefaultValueResolver(),
×
77
            new TypeHintContainerResolver($container),
×
78
        ];
×
79
    }
80

81
    /**
82
     * @throws ContainerExceptionInterface
83
     */
NEW
84
    private function getCustomResolvers(ContainerInterface $container): array
×
85
    {
86
        if (!$container->has('params.resolvers')) {
×
87
            return [];
×
88
        }
89

90
        $resolvers = $container->get('params.resolvers');
×
91

92
        return is_array($resolvers) ? $resolvers : [$resolvers];
×
93
    }
94
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc