diff --git a/modules/backend/ServiceProvider.php b/modules/backend/ServiceProvider.php index 7c2549eca8..6f13c796ad 100644 --- a/modules/backend/ServiceProvider.php +++ b/modules/backend/ServiceProvider.php @@ -20,6 +20,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 846a7b790c..d35a4c1176 100644 --- a/modules/cms/ServiceProvider.php +++ b/modules/cms/ServiceProvider.php @@ -36,6 +36,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 53f85a1899..d4d1b6c9af 100644 --- a/modules/system/ServiceProvider.php +++ b/modules/system/ServiceProvider.php @@ -38,6 +38,8 @@ class ServiceProvider extends ModuleServiceProvider */ public function register() { + parent::register(); + $this->registerSingletons(); $this->registerPrivilegedActions(); @@ -60,7 +62,14 @@ public function register() * Register other module providers */ foreach (Config::get('cms.loadModules', []) as $module) { - if (strtolower(trim($module)) != 'system') { + $moduleLower = strtolower(trim($module)); + $serviceProviderPath = base_path("modules/$moduleLower/ServiceProvider.php"); + if ( + strtolower(trim($module)) !== 'system' + && file_exists($serviceProviderPath) + ) { + // Load and register the module's ServiceProvider + require_once $serviceProviderPath; App::register('\\' . $module . '\ServiceProvider'); } } diff --git a/modules/system/classes/PluginManager.php b/modules/system/classes/PluginManager.php index 6ca9d0a65b..042f96c7c1 100644 --- a/modules/system/classes/PluginManager.php +++ b/modules/system/classes/PluginManager.php @@ -177,6 +177,10 @@ public function loadPlugin($namespace, $path) $classObj->disabled = true; } + // Register the plugin with the autoloader + $pluginNamespace = Str::before(get_class($classObj), '\\Plugin') . '\\'; + $this->app->make(ClassLoader::class)->autoloadPackage($pluginNamespace, $path . '/'); + $this->plugins[$classId] = $classObj; $this->pathMap[$classId] = $path; $this->normalizedMap[strtolower($classId)] = $classId; @@ -292,7 +296,7 @@ public function registerPlugin($plugin, $pluginId = null) foreach ($replaces as $replace) { $replaceNamespace = $this->getNamespace($replace); - App::make(ClassLoader::class)->addNamespaceAliases([ + $this->app->make(ClassLoader::class)->addNamespaceAliases([ // class_alias() expects order to be $real, $alias $this->getNamespace($pluginId) => $replaceNamespace, ]); diff --git a/modules/system/providers.php b/modules/system/providers.php index 9fb16b4893..150ce21ae6 100644 --- a/modules/system/providers.php +++ b/modules/system/providers.php @@ -1,5 +1,8 @@ register(); -$loader->addDirectories([ - 'modules', - 'plugins' -]);