app->register(RouteServiceProvider::class); } public function boot(): void { $this->registerTranslations(); $this->registerConfig(); $this->registerViews(); $this->registerHelpers(); $this->registerCommands(); $this->loadMigrationsFrom(module_path(ModuleInfo::name(), 'Database/Migrations')); } public function provides(): array { return []; } protected function registerHelpers(): void { foreach (glob(__DIR__.'/../Helpers/*.php') ?: [] as $filename) { require_once $filename; } } protected function registerCommands(): void { if (! $this->app->runningInConsole()) { return; } $commandPath = __DIR__.'/../Console'; if (! is_dir($commandPath)) { return; } $commands = collect(File::allFiles($commandPath)) ->map(fn ($file): string => 'Modules\\'.$this->moduleName.'\\Console\\'.$file->getFilenameWithoutExtension()) ->filter(fn (string $class): bool => class_exists($class)) ->values() ->all(); $this->commands($commands); } protected function registerConfig(): void { $this->publishes([ module_path(ModuleInfo::name(), 'Config/config.php') => config_path(ModuleInfo::nameLower().'.php'), ], 'config'); $this->mergeConfigFrom(module_path(ModuleInfo::name(), 'Config/config.php'), ModuleInfo::nameLower()); } protected function registerViews(): void { $viewPath = resource_path('views/modules/'.ModuleInfo::nameLower()); $sourcePath = module_path(ModuleInfo::name(), 'Resources/views'); $this->publishes([$sourcePath => $viewPath], ['views', ModuleInfo::nameLower().'-module-views']); $this->loadViewsFrom(array_merge($this->getPublishableViewPaths(), [$sourcePath]), ModuleInfo::nameLower()); } protected function registerTranslations(): void { $langPath = resource_path('lang/modules/'.ModuleInfo::nameLower()); if (is_dir($langPath)) { $this->loadTranslationsFrom($langPath, ModuleInfo::nameLower()); return; } $this->loadTranslationsFrom(module_path(ModuleInfo::name(), 'Resources/lang'), ModuleInfo::nameLower()); } private function getPublishableViewPaths(): array { $paths = []; foreach (Config::get('view.paths') as $path) { if (is_dir($path.'/modules/'.ModuleInfo::nameLower())) { $paths[] = $path.'/modules/'.ModuleInfo::nameLower(); } } return $paths; } }