Skip to content

Instantly share code, notes, and snippets.

@peterjaap
Created July 11, 2023 07:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save peterjaap/3aea31950676bdd7682c8c3c89fd0a7d to your computer and use it in GitHub Desktop.
Save peterjaap/3aea31950676bdd7682c8c3c89fd0a7d to your computer and use it in GitHub Desktop.
Drop-in ACSD-51892 patch for 2.4.6 / 2.4.6-p1 in vaimo/composer-patches format
@package magento/framework
@level 4
@version >=103.0.6 <103.0.7
diff --git a/vendor/magento/framework/App/DeploymentConfig.php b/vendor/magento/framework/App/DeploymentConfig.php
index 6713baa3a1d..64f32d5516b 100644
--- a/vendor/magento/framework/App/DeploymentConfig.php
+++ b/vendor/magento/framework/App/DeploymentConfig.php
@@ -51,6 +51,16 @@ class DeploymentConfig
*/
private $overrideData;
+ /**
+ * @var array
+ */
+ private $envOverrides = [];
+
+ /**
+ * @var array
+ */
+ private $readerLoad = [];
+
/**
* Constructor
*
@@ -84,7 +94,9 @@ class DeploymentConfig
}
$result = $this->getByKey($key);
if ($result === null) {
- $this->reloadData();
+ if (empty($this->flatData) || count($this->getAllEnvOverrides())) {
+ $this->reloadData();
+ }
$result = $this->getByKey($key);
}
return $result ?? $defaultValue;
@@ -114,13 +126,13 @@ class DeploymentConfig
{
if ($key === null) {
if (empty($this->data)) {
- $this->reloadData();
+ $this->reloadInitialData();
}
return $this->data;
}
$result = $this->getConfigDataByKey($key);
if ($result === null) {
- $this->reloadData();
+ $this->reloadInitialData();
$result = $this->getConfigDataByKey($key);
}
return $result;
@@ -170,28 +182,55 @@ class DeploymentConfig
* @throws FileSystemException
* @throws RuntimeException
*/
- private function reloadData(): void
+ private function reloadInitialData(): void
{
+ if (empty($this->readerLoad) || empty($this->data) || empty($this->flatData)) {
+ $this->readerLoad = $this->reader->load();
+ }
$this->data = array_replace(
- $this->reader->load(),
+ $this->readerLoad,
$this->overrideData ?? [],
$this->getEnvOverride()
);
+ }
+
+ /**
+ * Loads the configuration data
+ *
+ * @return void
+ * @throws FileSystemException
+ * @throws RuntimeException
+ */
+ private function reloadData(): void
+ {
+ $this->reloadInitialData();
// flatten data for config retrieval using get()
$this->flatData = $this->flattenParams($this->data);
+ $this->flatData = $this->getAllEnvOverrides() + $this->flatData;
+ }
- // allow reading values from env variables by convention
- // MAGENTO_DC_{path}, like db/connection/default/host =>
- // can be overwritten by MAGENTO_DC_DB__CONNECTION__DEFAULT__HOST
- foreach (getenv() as $key => $value) {
- if (false !== \strpos($key, self::MAGENTO_ENV_PREFIX)
- && $key !== self::OVERRIDE_KEY
- ) {
- // convert MAGENTO_DC_DB__CONNECTION__DEFAULT__HOST into db/connection/default/host
- $flatKey = strtolower(str_replace([self::MAGENTO_ENV_PREFIX, '__'], ['', '/'], $key));
- $this->flatData[$flatKey] = $value;
+ /**
+ * Load all getenv() configs once
+ *
+ * @return array
+ */
+ private function getAllEnvOverrides(): array
+ {
+ if (empty($this->envOverrides)) {
+ // allow reading values from env variables by convention
+ // MAGENTO_DC_{path}, like db/connection/default/host =>
+ // can be overwritten by MAGENTO_DC_DB__CONNECTION__DEFAULT__HOST
+ foreach (getenv() as $key => $value) {
+ if (false !== \strpos($key, self::MAGENTO_ENV_PREFIX)
+ && $key !== self::OVERRIDE_KEY
+ ) {
+ // convert MAGENTO_DC_DB__CONNECTION__DEFAULT__HOST into db/connection/default/host
+ $flatKey = strtolower(str_replace([self::MAGENTO_ENV_PREFIX, '__'], ['', '/'], $key));
+ $this->envOverrides[$flatKey] = $value;
+ }
}
}
+ return $this->envOverrides;
}
/**
diff --git a/vendor/magento/framework/Module/ModuleList.php b/vendor/magento/framework/Module/ModuleList.php
index b3cf433bbaf..32e2d2b1550 100644
--- a/vendor/magento/framework/Module/ModuleList.php
+++ b/vendor/magento/framework/Module/ModuleList.php
@@ -140,8 +140,11 @@ class ModuleList implements ModuleListInterface
*/
private function loadConfigData()
{
- if (null === $this->configData && null !== $this->config->get(ConfigOptionsListConstants::KEY_MODULES)) {
- $this->configData = $this->config->get(ConfigOptionsListConstants::KEY_MODULES);
+ if (null === $this->configData) {
+ $config = $this->config->get(ConfigOptionsListConstants::KEY_MODULES);
+ if (null !== $config) {
+ $this->configData = $config;
+ }
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment