-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathLoadConfigFiles.php
More file actions
146 lines (130 loc) · 3 KB
/
Copy pathLoadConfigFiles.php
File metadata and controls
146 lines (130 loc) · 3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
<?php
declare(strict_types=1);
namespace MaplePHP\Core\Configs;
use Exception;
use MaplePHP\Http\Env;
class LoadConfigFiles
{
private array $data = [];
/**
* Check if config parameter exists
*
* @param string $key
* @return bool
*/
public function has(string $key): bool
{
return isset($this->data[$key]);
}
/**
* Add one config parameter
*
* @param string $key
* @param mixed $value
* @return $this
*/
public function add(string $key, mixed $value): self
{
if ($this->has($key)) {
throw new \InvalidArgumentException('Config parameter "' . $key . '" already exists.');
}
$inst = clone $this;
$inst->data[$key] = $value;
return $inst;
}
/**
* Immutable load config from PHP file
*
* @param string $filePath
* @param bool $failSilently
* @return $this
* @throws Exception
*/
public function loadFile(string $filePath, bool $failSilently = false): self
{
if (!$this->hasExt($filePath, "php")) {
throw new \InvalidArgumentException("The file '$filePath' is not a valid PHP file extension");
}
$inst = clone $this;
$name = pathinfo($filePath, PATHINFO_FILENAME);
$data[$name] = $inst->loadConfigFile($filePath, $failSilently);
if ($data[$name] !== []) {
$inst->data = array_merge($inst->data, $data);
}
return $inst;
}
/**
* Load all config files in directory
*
* @param string $path
* @return $this
* @throws Exception
*/
public function loadFiles(string $path): self
{
if (!is_dir($path)) {
throw new \InvalidArgumentException("The dir '$path' does not exists.");
}
$inst = clone $this;
$arr = glob($path . "*.php");
foreach ($arr as $file) {
$inst = $inst->loadFile($file, true);
}
return $inst;
}
/**
* Immutable load config from env file
*
* @param string $filePath
* @return $this
*/
public function loadEnvFile(string $filePath): self
{
if (!$this->hasExt($filePath, "env")) {
throw new \InvalidArgumentException("The file '$filePath' is not a valid env file extension");
}
$inst = clone $this;
$env = new Env($filePath);
$env->execute();
//$inst->data = array_merge($inst->data, $env->getData());
return $inst;
}
/**
* Creates a configuration with cache
*
* @return array
*/
public function fetch(): array
{
return $this->data;
}
private function hasExt(string $filePath, string $extension): bool
{
$ext = strtolower(pathinfo($filePath, PATHINFO_EXTENSION));
return $ext === strtolower($extension);
}
/**
* Load a config file that returns a array
*
* @param string $path
* @param bool $failSilently
* @return array
* @throws Exception
*/
protected function loadConfigFile(string $path, bool $failSilently = false): array
{
$path = realpath($path);
if ($path === false) {
throw new Exception('The config file does not exist');
}
$config = require $path;
// Add JSON logic here in the future
if (!is_array($config)) {
if ($failSilently) {
return [];
}
throw new Exception('The config file do not return a array');
}
return $config;
}
}