85 lines
2.5 KiB
Markdown
85 lines
2.5 KiB
Markdown
# 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
|
|
<?php
|
|
|
|
/**
|
|
* {ModuleName} Module Routes
|
|
*
|
|
* @var RouteCollection $routes
|
|
*/
|
|
|
|
// Contoh route dengan group
|
|
$routes->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
|