20
20
class DeploymentConfig
21
21
{
22
22
private const MAGENTO_ENV_PREFIX = 'MAGENTO_DC_ ' ;
23
- private const ENV_NAME_PATTERN = '~^%env\(\s*(?<name>\w+)\s*(,\s*"(?<default>[^"]+)")?\)%$~ ' ;
23
+ private const ENV_NAME_PATTERN = '~^#env\(\s*(?<name>\w+)\s*(,\s*"(?<default>[^"]+)")?\)$~ ' ;
24
+ private const OVERRIDE_KEY = self ::MAGENTO_ENV_PREFIX . '_OVERRIDE ' ;
24
25
25
26
/**
26
27
* Configuration reader
@@ -151,7 +152,7 @@ public function isDbAvailable()
151
152
*/
152
153
private function getEnvOverride () : array
153
154
{
154
- $ env = getenv (self ::MAGENTO_ENV_PREFIX . ' _OVERRIDE ' );
155
+ $ env = getenv (self ::OVERRIDE_KEY );
155
156
return !empty ($ env ) ? (json_decode ($ env , true ) ?? []) : [];
156
157
}
157
158
@@ -172,6 +173,19 @@ private function load()
172
173
);
173
174
// flatten data for config retrieval using get()
174
175
$ this ->flatData = $ this ->flattenParams ($ this ->data );
176
+
177
+ // allow reading values from env variables by convention
178
+ // MAGENTO_DC_{path}, like db/connection/default/host =>
179
+ // can be overwritten by MAGENTO_DC_DB__CONNECTION__DEFAULT__HOST
180
+ foreach (getenv () as $ key => $ value ) {
181
+ if (false !== \strpos ($ key , self ::MAGENTO_ENV_PREFIX )
182
+ && $ key !== self ::OVERRIDE_KEY
183
+ ) {
184
+ // convert MAGENTO_DC_DB__CONNECTION__DEFAULT__HOST into db/connection/default/host
185
+ $ flatKey = strtolower (str_replace ([self ::MAGENTO_ENV_PREFIX , '__ ' ], ['' , '/ ' ], $ key ));
186
+ $ this ->flatData [$ flatKey ] = $ value ;
187
+ }
188
+ }
175
189
}
176
190
}
177
191
@@ -210,17 +224,11 @@ private function flattenParams(array $params, $path = null, array &$flattenResul
210
224
} else {
211
225
// allow reading values from env variables
212
226
// value need to be specified in %env(NAME, "default value")% format
213
- // like % env(DB_PASSWORD)%, % env(DB_NAME, "test")%
227
+ // like # env(DB_PASSWORD), # env(DB_NAME, "test")
214
228
if (preg_match (self ::ENV_NAME_PATTERN , $ param , $ matches )) {
215
229
$ param = getenv ($ matches ['name ' ]) ?: ($ matches ['default ' ] ?? null );
216
230
}
217
231
218
- // allow reading values from env variables by convention
219
- // MAGENTO_DC_{path}, like db/connection/default/host =>
220
- // can be overwritten by MAGENTO_DC_DB__CONNECTION__DEFAULT__HOST
221
- $ envName = self ::MAGENTO_ENV_PREFIX . strtoupper (str_replace (['/ ' ], ['__ ' ], $ newPath ));
222
- $ param = getenv ($ envName ) ?: $ param ;
223
-
224
232
$ flattenResult [$ newPath ] = $ param ;
225
233
}
226
234
}
0 commit comments