PHPConfigLoader::load()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 5
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 2
1
<?php
2
3
namespace App\Common\Config;
4
5
use Symfony\Component\Config\Loader\FileLoader;
6
use Symfony\Component\Config\Exception\FileLoaderLoadException;
7
use Symfony\Component\Config\Definition\Processor;
8
9
/**
10
 * Class PHPConfigLoader
11
 *
12
 * @package App\Common\Config
13
 */
14
class PHPConfigLoader extends FileLoader
15
{
16
    /**
17
     * @var FileLocator
18
     */
19
    protected $locator;
20
21
    /**
22
     * Import all loadable resources
23
     *
24
     * @return array
25
     * @throws FileLoaderLoadException
26
     */
27
    public function importAll()
28
    {
29
        // in order to import all we need to have locator to locate these "all"
30
        // locator need
31
        if (empty($this->locator)) {
32
            throw new FileLoaderLoadException('importAll()');
33
        }
34
35
        // locator must be capable of locating all
36
        if (!is_callable([$this->locator, 'locateAll'])) {
37
            throw new FileLoaderLoadException('locateAll()');
38
        }
39
40
        // build list of 'all' files
41
        $files = $this->locator->locateAll();
42
43
        // and now try to import configuration from this list of 'all' files
44
        $res = [];
45
        foreach ($files as $file) {
46
            if ($this->supports($file)) {
47
                // file is supported - load/import it
48
                $config = $this->load($file);
49
50
                if (!empty($config['definition'])) {
51
                    // loaded config can be verified
52
                    $processor = new Processor();
53
                    $configDefinition = new $config['definition']();
54
                    // process config according to specified definition
55
                    $config = $processor->processConfiguration(
56
                        $configDefinition,
57
                        [$config]
58
                    );
59
                }
60
61
                // combine all configs into one "unified general config"
62
                $res = array_merge($res, $config);
63
            }
64
        }
65
66
        // array of configuration
67
        return $res;
68
    }
69
70
    /**
71
     * @inheritdoc
72
     * @return array|\StdClass loaded object
73
     */
74
    public function load($resource, $type = null)
75
    {
76
        // for PHP file load process is quite simple - just return config file content
77
        return require_once $resource;
78
    }
79
80
    /**
81
     * Returns whether current loader supports specified resource load
82
     *
83
     * @param mixed $resource path to config file
84
     * @param null $type unsused
85
     * @return bool
86
     */
87
    public function supports($resource, $type = null)
88
    {
89
        // $resource is expected to be path to config file
90
        if (!is_string($resource)) {
91
            return false;
92
        }
93
94
        // specified config file should be readable
95
        if (!@is_file($resource) || !@is_readable($resource)) {
96
            return false;
97
        }
98
99
        // simple check - PHP loader accepts PHP files, thus let's check file extension to be 'php'
100
101
        // fetch config file extension
102
        $extension = pathinfo($resource, PATHINFO_EXTENSION);
103
104
        // PHP loader accepts PHP files
105
        return  $extension == 'php';
106
    }
107
}
108