diff --git a/system/Config/Factories.php b/system/Config/Factories.php index a32df02725ac..d5ba12efabe1 100644 --- a/system/Config/Factories.php +++ b/system/Config/Factories.php @@ -100,6 +100,8 @@ class Factories */ public static function define(string $component, string $alias, string $classname): void { + $component = strtolower($component); + if (isset(self::$aliases[$component][$alias])) { if (self::$aliases[$component][$alias] === $classname) { return; @@ -130,12 +132,14 @@ public static function define(string $component, string $alias, string $classnam */ public static function __callStatic(string $component, array $arguments) { + $component = strtolower($component); + // First argument is the class alias, second is options $alias = trim(array_shift($arguments), '\\ '); $options = array_shift($arguments) ?? []; // Determine the component-specific options - $options = array_merge(self::getOptions(strtolower($component)), $options); + $options = array_merge(self::getOptions($component), $options); if (! $options['getShared']) { if (isset(self::$aliases[$component][$alias])) { @@ -394,6 +398,8 @@ public static function getOptions(string $component): array */ public static function setOptions(string $component, array $values): array { + $component = strtolower($component); + // Allow the config to replace the component name, to support "aliases" $values['component'] = strtolower($values['component'] ?? $component); @@ -424,19 +430,19 @@ public static function reset(?string $component = null) { if ($component) { unset( - static::$options[$component], - static::$aliases[$component], - static::$instances[$component], - static::$updated[$component] + self::$options[$component], + self::$aliases[$component], + self::$instances[$component], + self::$updated[$component] ); return; } - static::$options = []; - static::$aliases = []; - static::$instances = []; - static::$updated = []; + self::$options = []; + self::$aliases = []; + self::$instances = []; + self::$updated = []; } /** @@ -452,8 +458,9 @@ public static function reset(?string $component = null) */ public static function injectMock(string $component, string $alias, object $instance) { - // Force a configuration to exist for this component $component = strtolower($component); + + // Force a configuration to exist for this component self::getOptions($component); $class = get_class($instance); @@ -493,15 +500,17 @@ public static function getBasename(string $alias): string */ public static function getComponentInstances(string $component): array { - if (! isset(static::$aliases[$component])) { + if (! isset(self::$aliases[$component])) { return [ + 'options' => [], 'aliases' => [], 'instances' => [], ]; } return [ - 'aliases' => static::$aliases[$component], + 'options' => self::$options[$component], + 'aliases' => self::$aliases[$component], 'instances' => self::$instances[$component], ]; } @@ -513,8 +522,10 @@ public static function getComponentInstances(string $component): array */ public static function setComponentInstances(string $component, array $data): void { - static::$aliases[$component] = $data['aliases']; + self::$options[$component] = $data['options']; + self::$aliases[$component] = $data['aliases']; self::$instances[$component] = $data['instances']; + unset(self::$updated[$component]); } diff --git a/tests/system/Config/FactoriesTest.php b/tests/system/Config/FactoriesTest.php index b53c1e9133e5..6f74414def4e 100644 --- a/tests/system/Config/FactoriesTest.php +++ b/tests/system/Config/FactoriesTest.php @@ -429,7 +429,7 @@ public function testGetComponentInstances() public function testSetComponentInstances(array $data) { $before = Factories::getComponentInstances('config'); - $this->assertSame(['aliases' => [], 'instances' => []], $before); + $this->assertSame(['options' => [], 'aliases' => [], 'instances' => []], $before); Factories::setComponentInstances('config', $data);