# Module Loader Documentation ## Overview ModuleLoader adalah sistem yang secara otomatis memuat route dari setiap modul di `app/Modules/*`. Setiap modul dapat memiliki file `Routes.php` yang akan otomatis dimuat saat aplikasi di-boot. ## Cara Kerja 1. **Automatic Discovery**: ModuleLoader secara otomatis memindai semua direktori di `app/Modules/*` 2. **Route Loading**: Jika sebuah modul memiliki file `Routes.php`, file tersebut akan otomatis dimuat 3. **Route Registration**: Route yang didefinisikan di file `Routes.php` modul akan terdaftar ke sistem routing CodeIgniter ## Struktur Modul Setiap modul harus mengikuti struktur berikut: ``` app/Modules/ └── {ModuleName}/ ├── Routes.php # File route untuk modul ini (opsional) ├── Controllers/ ├── Models/ ├── Services/ └── Entities/ ``` ## Cara Membuat Routes di Modul Buat file `Routes.php` di root direktori modul Anda: ```php group('api/module-name', ['namespace' => 'App\Modules\{ModuleName}\Controllers'], function($routes) { $routes->get('/', 'ControllerName::index'); $routes->post('/', 'ControllerName::create'); $routes->get('(:num)', 'ControllerName::show/$1'); $routes->put('(:num)', 'ControllerName::update/$1'); $routes->delete('(:num)', 'ControllerName::delete/$1'); }); // Atau route langsung $routes->get('api/module-name/endpoint', 'App\Modules\{ModuleName}\Controllers\ControllerName::method'); ``` ## Integrasi ModuleLoader sudah terintegrasi di `app/Config/Routes.php`: ```php use Config\ModuleLoader; $moduleLoader = new ModuleLoader(); $moduleLoader->loadModuleRoutes($routes); ``` Route dari modul akan dimuat sebelum route utama aplikasi, sehingga route utama dapat override route modul jika diperlukan. ## API Methods ### `loadModuleRoutes(RouteCollection $routes): void` Memuat semua route dari modul yang memiliki file `Routes.php`. ### `getAvailableModules(): array` Mengembalikan array nama modul yang tersedia. ### `moduleExists(string $moduleName): bool` Memeriksa apakah modul dengan nama tertentu ada. ### `getModulePath(string $moduleName): ?string` Mengembalikan path lengkap ke modul, atau `null` jika tidak ditemukan. ## Catatan - File `Routes.php` di modul harus menggunakan variabel `$routes` yang sudah tersedia - Route dari modul dimuat dalam urutan alfabetis berdasarkan nama modul - Jika ada konflik route, route yang dimuat terakhir akan mengambil prioritas