install
This commit is contained in:
177
app/Modules/ModuleServiceProvider.php
Normal file
177
app/Modules/ModuleServiceProvider.php
Normal file
@@ -0,0 +1,177 @@
|
||||
<?php
|
||||
|
||||
namespace App\Modules;
|
||||
|
||||
use Illuminate\Contracts\Foundation\Application;
|
||||
use Illuminate\Support\ServiceProvider;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class ModuleServiceProvider extends ServiceProvider
|
||||
{
|
||||
/**
|
||||
* Register services.
|
||||
*/
|
||||
public function register(): void
|
||||
{
|
||||
$this->app->singleton(ModuleRepository::class, function (Application $app) {
|
||||
return new ModuleRepository;
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Bootstrap services.
|
||||
*/
|
||||
public function boot(): void
|
||||
{
|
||||
$this->loadModuleCommands();
|
||||
|
||||
modules()->each(function (BaseModule $module) {
|
||||
// Verify module composer requirements
|
||||
$this->verifyModuleComposerRequirements($module);
|
||||
|
||||
// Suggest module composer suggestions
|
||||
$this->suggestModuleComposerSuggestions($module);
|
||||
|
||||
// Module Routes
|
||||
$this->loadModuleRoutes($module);
|
||||
|
||||
// Module Migrations
|
||||
$this->loadModuleMigrations($module);
|
||||
|
||||
// Module Views
|
||||
$this->loadModuleViews($module);
|
||||
|
||||
// Module Helpers
|
||||
$this->loadModuleHelpers($module);
|
||||
|
||||
// Module Translations
|
||||
$this->loadModuleTranslations($module);
|
||||
|
||||
// Module Configs
|
||||
$this->loadModuleConfigs($module);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Verify module composer requirements
|
||||
*/
|
||||
public function verifyModuleComposerRequirements(BaseModule $module): void
|
||||
{
|
||||
// foreach ($module->app->getComposerRequirements() as $requirement) {
|
||||
|
||||
// }
|
||||
}
|
||||
|
||||
/**
|
||||
* Suggest module composer suggestions
|
||||
*/
|
||||
public function suggestModuleComposerSuggestions(BaseModule $module): void
|
||||
{
|
||||
// foreach ($module->app->getComposerSuggestions() as $suggestion) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Load module configs
|
||||
*/
|
||||
public function loadModuleConfigs(BaseModule $module): void
|
||||
{
|
||||
$moduleName = Str::kebab($module->name);
|
||||
|
||||
$configPath = sprintf('%s/Configs/%s-config.php', $module->path, $moduleName);
|
||||
|
||||
if (is_file($configPath)) {
|
||||
$this->mergeConfigFrom($configPath, 'module.'.$moduleName);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Load module views
|
||||
*/
|
||||
public function loadModuleViews(BaseModule $module): void
|
||||
{
|
||||
$moduleName = Str::kebab($module->name);
|
||||
|
||||
$viewsPath = $module->path.'/Resources/Views';
|
||||
|
||||
if (is_dir($viewsPath)) {
|
||||
$this->loadViewsFrom($viewsPath, 'module.'.$moduleName);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Load module migrations
|
||||
*/
|
||||
public function loadModuleMigrations(BaseModule $module): void
|
||||
{
|
||||
$migrationDirectory = $module->path.'/Database/Migrations';
|
||||
|
||||
if (is_dir($migrationDirectory)) {
|
||||
$this->loadMigrationsFrom($migrationDirectory);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Load module routes
|
||||
*/
|
||||
public function loadModuleRoutes(BaseModule $module): void
|
||||
{
|
||||
$routesPath = sprintf('%s/Routes/%s-routes.php', $module->path, Str::kebab($module->name));
|
||||
|
||||
if (is_file($routesPath)) {
|
||||
$this->loadRoutesFrom($routesPath);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Load module helpers
|
||||
*/
|
||||
public function loadModuleHelpers(BaseModule $module): void
|
||||
{
|
||||
$moduleName = Str::kebab($module->name);
|
||||
|
||||
$helpersPath = sprintf('%s/%s-helpers.php', $module->path, $moduleName);
|
||||
|
||||
if (is_file($helpersPath)) {
|
||||
require_once $helpersPath;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Load module translations
|
||||
*/
|
||||
public function loadModuleTranslations(BaseModule $module): void
|
||||
{
|
||||
$translationsPath = sprintf('%s/Resources/lang', $module->path);
|
||||
|
||||
if (is_dir($translationsPath)) {
|
||||
$this->loadTranslationsFrom($translationsPath, 'module.'.Str::kebab($module->name));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Load module commands
|
||||
*/
|
||||
public function loadModuleCommands(): void
|
||||
{
|
||||
if (! $this->app->runningInConsole()) {
|
||||
return;
|
||||
}
|
||||
|
||||
$commands = [];
|
||||
$commandFiles = glob(modules_path('Core/Commands/').'*.php');
|
||||
|
||||
if (! $commandFiles) {
|
||||
return;
|
||||
}
|
||||
|
||||
foreach ($commandFiles as $commandFile) {
|
||||
$commandClass = 'App\\Modules\\Core\\Commands\\'.pathinfo($commandFile, PATHINFO_FILENAME);
|
||||
|
||||
if (class_exists($commandClass)) {
|
||||
$commands[] = $commandClass;
|
||||
}
|
||||
}
|
||||
|
||||
$this->commands($commands);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user