diff --git a/modules/backend/ServiceProvider.php b/modules/backend/ServiceProvider.php index 5933c03797..1dedc46b87 100644 --- a/modules/backend/ServiceProvider.php +++ b/modules/backend/ServiceProvider.php @@ -19,6 +19,8 @@ class ServiceProvider extends ModuleServiceProvider */ public function register() { + parent::register(); + $this->registerConsole(); $this->registerMailer(); $this->registerAssetBundles(); diff --git a/modules/cms/ServiceProvider.php b/modules/cms/ServiceProvider.php index a394973966..609528428a 100644 --- a/modules/cms/ServiceProvider.php +++ b/modules/cms/ServiceProvider.php @@ -34,6 +34,8 @@ class ServiceProvider extends ModuleServiceProvider */ public function register() { + parent::register(); + $this->registerConsole(); $this->registerTwigParser(); $this->registerAssetBundles(); diff --git a/modules/system/ServiceProvider.php b/modules/system/ServiceProvider.php index ec4e8b11bc..90ca44ae2e 100644 --- a/modules/system/ServiceProvider.php +++ b/modules/system/ServiceProvider.php @@ -35,6 +35,8 @@ class ServiceProvider extends ModuleServiceProvider */ public function register() { + parent::register(); + $this->registerSingletons(); $this->registerPrivilegedActions(); diff --git a/modules/system/classes/PluginManager.php b/modules/system/classes/PluginManager.php index d29d28a839..cd39f86472 100644 --- a/modules/system/classes/PluginManager.php +++ b/modules/system/classes/PluginManager.php @@ -150,6 +150,8 @@ public function loadPlugin(string $namespace, string $path): ?PluginBase $className = $namespace . '\Plugin'; $classPath = $path . '/Plugin.php'; + $this->app->make(ClassLoader::class)->autoloadPackage($namespace, $path); + try { // Autoloader failed? if (!class_exists($className)) { diff --git a/modules/system/tests/bootstrap/app.php b/modules/system/tests/bootstrap/app.php index 9be7e9d5db..11dd502e78 100644 --- a/modules/system/tests/bootstrap/app.php +++ b/modules/system/tests/bootstrap/app.php @@ -17,7 +17,34 @@ ); $loader->register(); -$loader->addDirectories([ - 'modules', - 'plugins' -]); + +/* + * Manually register all module classes for autoloading + */ +foreach (glob($baseDir . '/modules/*', GLOB_ONLYDIR) as $modulePath) { + $loader->autoloadPackage(basename($modulePath), $modulePath); +} + +/* + * Manually register all plugin classes for autoloading + */ +$dirPath = $baseDir . '/plugins'; +if (is_dir($dirPath)) { + $it = new RecursiveIteratorIterator( + new RecursiveDirectoryIterator($dirPath, FilesystemIterator::FOLLOW_SYMLINKS) + ); + $it->setMaxDepth(2); + $it->rewind(); + + while ($it->valid()) { + if (($it->getDepth() > 1) && $it->isFile() && (strtolower($it->getFilename()) === "plugin.php")) { + $filePath = dirname($it->getPathname()); + $pluginName = basename($filePath); + $vendorName = basename(dirname($filePath)); + + $loader->autoloadPackage($vendorName . '\\' . $pluginName, $filePath); + } + + $it->next(); + } +}