FleetCart/Modules/Core/Providers/ModuleServiceProvider.php

92 lines
2.6 KiB
PHP
Raw Normal View History

2023-06-11 12:14:03 +00:00
<?php
namespace Modules\Core\Providers;
use Nwidart\Modules\Module;
use Illuminate\Support\ServiceProvider;
use Illuminate\Database\Eloquent\Factory as ModelFactory;
class ModuleServiceProvider extends ServiceProvider
{
/**
* Register the service provider.
*
* @return void
*/
public function register()
{
foreach ($this->app['modules']->allEnabled() as $module) {
$this->loadViews($module);
$this->loadTranslations($module);
$this->loadConfigs($module);
$this->loadMigrations($module);
$this->loadModelFactories($module);
}
}
/**
* Load views for the given module.
*
* @param \Nwidart\Modules\Module $module
* @return void
*/
private function loadViews(Module $module)
{
$this->loadViewsFrom("{$module->getPath()}/Resources/views", $module->get('alias'));
}
/**
* Load translations for the given module.
*
* @param \Nwidart\Modules\Module $module
* @return void
*/
private function loadTranslations(Module $module)
{
$this->loadTranslationsFrom("{$module->getPath()}/Resources/lang", $module->get('alias'));
}
/**
* Load migrations for the given module.
*
* @param \Nwidart\Modules\Module $module
* @return void
*/
private function loadConfigs(Module $module)
{
collect([
'config' => "{$module->getPath()}/Config/config.php",
'assets' => "{$module->getPath()}/Config/assets.php",
'permissions' => "{$module->getPath()}/Config/permissions.php",
])->filter(function ($path) {
return file_exists($path);
})->each(function ($path, $filename) use ($module) {
$this->mergeConfigFrom($path, "fleetcart.modules.{$module->get('alias')}.{$filename}");
});
}
/**
* Load migrations for the given module.
*
* @param \Nwidart\Modules\Module $module
* @return void
*/
private function loadMigrations(Module $module)
{
$this->loadMigrationsFrom("{$module->getPath()}/Database/Migrations");
}
/**
* Load model factories for the given module.
*
* @param \Nwidart\Modules\Module $module
* @return void
*/
private function loadModelFactories(Module $module)
{
$this->callAfterResolving(ModelFactory::class, function (ModelFactory $factory) use ($module) {
$factory->load("{$module->getPath()}/Database/Factories");
});
}
}