2020class DeploymentConfig
2121{
2222 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 ' ;
2425
2526 /**
2627 * Configuration reader
@@ -151,7 +152,7 @@ public function isDbAvailable()
151152 */
152153 private function getEnvOverride () : array
153154 {
154- $ env = getenv (self ::MAGENTO_ENV_PREFIX . ' _OVERRIDE ' );
155+ $ env = getenv (self ::OVERRIDE_KEY );
155156 return !empty ($ env ) ? (json_decode ($ env , true ) ?? []) : [];
156157 }
157158
@@ -172,6 +173,19 @@ private function load()
172173 );
173174 // flatten data for config retrieval using get()
174175 $ 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+ }
175189 }
176190 }
177191
@@ -210,17 +224,11 @@ private function flattenParams(array $params, $path = null, array &$flattenResul
210224 } else {
211225 // allow reading values from env variables
212226 // 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")
214228 if (preg_match (self ::ENV_NAME_PATTERN , $ param , $ matches )) {
215229 $ param = getenv ($ matches ['name ' ]) ?: ($ matches ['default ' ] ?? null );
216230 }
217231
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-
224232 $ flattenResult [$ newPath ] = $ param ;
225233 }
226234 }
0 commit comments