diff --git a/system/Common.php b/system/Common.php index 086c4db48b01..983a8f9335f0 100644 --- a/system/Common.php +++ b/system/Common.php @@ -214,6 +214,10 @@ function command(string $command) */ function config(string $name, bool $getShared = true) { + if ($getShared) { + return Factories::get('config', $name); + } + return Factories::config($name, ['getShared' => $getShared]); } } diff --git a/system/Config/Factories.php b/system/Config/Factories.php index c4f443cc3a2d..08cfa1deaad6 100644 --- a/system/Config/Factories.php +++ b/system/Config/Factories.php @@ -141,8 +141,8 @@ public static function __callStatic(string $component, array $arguments) $options = array_merge(self::getOptions($component), $options); if (! $options['getShared']) { - if (isset(self::$aliases[$component][$alias])) { - $class = self::$aliases[$component][$alias]; + if (isset(self::$aliases[$options['component']][$alias])) { + $class = self::$aliases[$options['component']][$alias]; return new $class(...$arguments); } @@ -173,6 +173,20 @@ public static function __callStatic(string $component, array $arguments) return self::$instances[$options['component']][$class]; } + /** + * Simple method to get the shared instance fast. + */ + public static function get(string $component, string $alias): ?object + { + if (isset(self::$aliases[$component][$alias])) { + $class = self::$aliases[$component][$alias]; + + return self::$instances[$component][$class]; + } + + return self::__callStatic($component, [$alias]); + } + /** * Gets the defined instance. If not exists, creates new one. * diff --git a/tests/system/Config/FactoriesTest.php b/tests/system/Config/FactoriesTest.php index 4b8c66c1e2e1..f40b0968fb74 100644 --- a/tests/system/Config/FactoriesTest.php +++ b/tests/system/Config/FactoriesTest.php @@ -465,4 +465,25 @@ public function testIsUpdated(array $data) $this->assertFalse(Factories::isUpdated('config')); } + + public function testGetReturnsFactoriesConfigInstance() + { + $config = Factories::config('App'); + + $this->assertSame($config, Factories::get('config', 'App')); + } + + public function testGetCreatesConfigInstanceAndFactoriesConfigReturnsIt() + { + $config = Factories::get('config', 'App'); + + $this->assertSame($config, Factories::config('App')); + } + + public function testGetNonexistentClass() + { + $config = Factories::get('config', 'NonexistentClass'); + + $this->assertNull($config); + } }