Files
Laravel-Docker-Dev-Template/src/app/Providers/ModuleServiceProvider.php.stub
2026-03-06 08:57:05 +02:00

122 lines
3.1 KiB
Plaintext

<?php
namespace App\Providers;
use Illuminate\Support\Facades\File;
use Illuminate\Support\ServiceProvider;
class ModuleServiceProvider extends ServiceProvider
{
/**
* Register services.
*/
public function register(): void
{
$this->registerModules();
}
/**
* Bootstrap services.
*/
public function boot(): void
{
$this->bootModules();
}
/**
* Register all modules.
*/
protected function registerModules(): void
{
$modulesPath = app_path('Modules');
if (!File::isDirectory($modulesPath)) {
return;
}
$modules = File::directories($modulesPath);
foreach ($modules as $modulePath) {
$moduleName = basename($modulePath);
$providerClass = "App\\Modules\\{$moduleName}\\{$moduleName}ServiceProvider";
if (class_exists($providerClass)) {
$this->app->register($providerClass);
}
}
}
/**
* Boot all modules.
*/
protected function bootModules(): void
{
$modulesPath = app_path('Modules');
if (!File::isDirectory($modulesPath)) {
return;
}
$modules = File::directories($modulesPath);
foreach ($modules as $modulePath) {
$moduleName = basename($modulePath);
// Load module config
$configPath = "{$modulePath}/Config";
if (File::isDirectory($configPath)) {
foreach (File::files($configPath) as $file) {
$this->mergeConfigFrom(
$file->getPathname(),
strtolower($moduleName) . '.' . $file->getFilenameWithoutExtension()
);
}
}
// Load module routes
$this->loadModuleRoutes($modulePath, $moduleName);
// Load module views
$viewsPath = "{$modulePath}/Resources/views";
if (File::isDirectory($viewsPath)) {
$this->loadViewsFrom($viewsPath, strtolower(preg_replace('/(?<!^)[A-Z]/', '-$0', $moduleName)));
}
// Load module migrations
$migrationsPath = "{$modulePath}/Database/Migrations";
if (File::isDirectory($migrationsPath)) {
$this->loadMigrationsFrom($migrationsPath);
}
// Load module translations
$langPath = "{$modulePath}/Resources/lang";
if (File::isDirectory($langPath)) {
$this->loadTranslationsFrom($langPath, strtolower($moduleName));
}
}
}
/**
* Load module routes.
*/
protected function loadModuleRoutes(string $modulePath, string $moduleName): void
{
$routesPath = "{$modulePath}/Routes";
if (!File::isDirectory($routesPath)) {
return;
}
$webRoutes = "{$routesPath}/web.php";
$apiRoutes = "{$routesPath}/api.php";
if (File::exists($webRoutes)) {
$this->loadRoutesFrom($webRoutes);
}
if (File::exists($apiRoutes)) {
$this->loadRoutesFrom($apiRoutes);
}
}
}