1
+ diff -Nuar a/vendor/magento/framework/App/DeploymentConfig.php b/vendor/magento/framework/App/DeploymentConfig.php
2
+ index 6713baa3a1d..64f32d5516b 100644
3
+ --- a/vendor/magento/framework/App/DeploymentConfig.php
4
+ +++ b/vendor/magento/framework/App/DeploymentConfig.php
5
+ @@ -51,6 +51,16 @@ class DeploymentConfig
6
+ */
7
+ private $overrideData;
8
+
9
+ + /**
10
+ + * @var array
11
+ + */
12
+ + private $envOverrides = [];
13
+ +
14
+ + /**
15
+ + * @var array
16
+ + */
17
+ + private $readerLoad = [];
18
+ +
19
+ /**
20
+ * Constructor
21
+ *
22
+ @@ -84,7 +94,9 @@ class DeploymentConfig
23
+ }
24
+ $result = $this->getByKey($key);
25
+ if ($result === null) {
26
+ - $this->reloadData();
27
+ + if (empty($this->flatData) || count($this->getAllEnvOverrides())) {
28
+ + $this->reloadData();
29
+ + }
30
+ $result = $this->getByKey($key);
31
+ }
32
+ return $result ?? $defaultValue;
33
+ @@ -114,13 +126,13 @@ class DeploymentConfig
34
+ {
35
+ if ($key === null) {
36
+ if (empty($this->data)) {
37
+ - $this->reloadData();
38
+ + $this->reloadInitialData();
39
+ }
40
+ return $this->data;
41
+ }
42
+ $result = $this->getConfigDataByKey($key);
43
+ if ($result === null) {
44
+ - $this->reloadData();
45
+ + $this->reloadInitialData();
46
+ $result = $this->getConfigDataByKey($key);
47
+ }
48
+ return $result;
49
+ @@ -170,28 +182,55 @@ class DeploymentConfig
50
+ * @throws FileSystemException
51
+ * @throws RuntimeException
52
+ */
53
+ - private function reloadData(): void
54
+ + private function reloadInitialData(): void
55
+ {
56
+ + if (empty($this->readerLoad) || empty($this->data) || empty($this->flatData)) {
57
+ + $this->readerLoad = $this->reader->load();
58
+ + }
59
+ $this->data = array_replace(
60
+ - $this->reader->load(),
61
+ + $this->readerLoad,
62
+ $this->overrideData ?? [],
63
+ $this->getEnvOverride()
64
+ );
65
+ + }
66
+ +
67
+ + /**
68
+ + * Loads the configuration data
69
+ + *
70
+ + * @return void
71
+ + * @throws FileSystemException
72
+ + * @throws RuntimeException
73
+ + */
74
+ + private function reloadData(): void
75
+ + {
76
+ + $this->reloadInitialData();
77
+ // flatten data for config retrieval using get()
78
+ $this->flatData = $this->flattenParams($this->data);
79
+ + $this->flatData = $this->getAllEnvOverrides() + $this->flatData;
80
+ + }
81
+
82
+ - // allow reading values from env variables by convention
83
+ - // MAGENTO_DC_{path}, like db/connection/default/host =>
84
+ - // can be overwritten by MAGENTO_DC_DB__CONNECTION__DEFAULT__HOST
85
+ - foreach (getenv() as $key => $value) {
86
+ - if (false !== \strpos($key, self::MAGENTO_ENV_PREFIX)
87
+ - && $key !== self::OVERRIDE_KEY
88
+ - ) {
89
+ - // convert MAGENTO_DC_DB__CONNECTION__DEFAULT__HOST into db/connection/default/host
90
+ - $flatKey = strtolower(str_replace([self::MAGENTO_ENV_PREFIX, '__'], ['', '/'], $key));
91
+ - $this->flatData[$flatKey] = $value;
92
+ + /**
93
+ + * Load all getenv() configs once
94
+ + *
95
+ + * @return array
96
+ + */
97
+ + private function getAllEnvOverrides(): array
98
+ + {
99
+ + if (empty($this->envOverrides)) {
100
+ + // allow reading values from env variables by convention
101
+ + // MAGENTO_DC_{path}, like db/connection/default/host =>
102
+ + // can be overwritten by MAGENTO_DC_DB__CONNECTION__DEFAULT__HOST
103
+ + foreach (getenv() as $key => $value) {
104
+ + if (false !== \strpos($key, self::MAGENTO_ENV_PREFIX)
105
+ + && $key !== self::OVERRIDE_KEY
106
+ + ) {
107
+ + // convert MAGENTO_DC_DB__CONNECTION__DEFAULT__HOST into db/connection/default/host
108
+ + $flatKey = strtolower(str_replace([self::MAGENTO_ENV_PREFIX, '__'], ['', '/'], $key));
109
+ + $this->envOverrides[$flatKey] = $value;
110
+ + }
111
+ }
112
+ }
113
+ + return $this->envOverrides;
114
+ }
115
+
116
+ /**
117
+ diff -Nuar a/vendor/magento/framework/Module/ModuleList.php b/vendor/magento/framework/Module/ModuleList.php
118
+ index b3cf433bbaf..32e2d2b1550 100644
119
+ --- a/vendor/magento/framework/Module/ModuleList.php
120
+ +++ b/vendor/magento/framework/Module/ModuleList.php
121
+ @@ -140,8 +140,11 @@ class ModuleList implements ModuleListInterface
122
+ */
123
+ private function loadConfigData()
124
+ {
125
+ - if (null === $this->configData && null !== $this->config->get(ConfigOptionsListConstants::KEY_MODULES)) {
126
+ - $this->configData = $this->config->get(ConfigOptionsListConstants::KEY_MODULES);
127
+ + if (null === $this->configData) {
128
+ + $config = $this->config->get(ConfigOptionsListConstants::KEY_MODULES);
129
+ + if (null !== $config) {
130
+ + $this->configData = $config;
131
+ + }
132
+ }
133
+ }
134
+ }
0 commit comments