Files
presensi/app/Config/ModuleLoader.md
2026-03-05 14:37:36 +07:00

2.5 KiB

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

/**
 * {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:

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