Apa itu Pemrograman HMVC di CodeIgniter 4?
CodeIgniter adalah framework berbasis php dan bekerja pada pola MVC (Model-View-Controller). Bisa juga menggunakan Hierarchical Model View Controller (HMVC).
HMVC adalah singkatan dari Hierarchical Model View Controller. Pola ini biasa digunakan untuk pengembangan aplikasi sekala besar.
Gambarannya sbb :


Persiapan
Buat folder Modules di project root

Registrasi Module
Buka file /app/Config/Autoload.php lalu tambahkan baris sbb :
public $psr4 = [
APP_NAMESPACE => APPPATH, // For custom app namespace
'Config' => APPPATH . 'Config',
'Modules\User' => ROOTPATH. 'Modules/User',
];
Membuat Controller
php spark make:controller User --suffix --namespace "Modules\User"
Siapkan View
Buat folder dan tambahkan file Modules/User/Views/view_main.php
This is User Module
Edit Controller
Buka file Modules/User/Controllers/UserController.php
Pengaturan Routes
Untuk mendaftarkan Route Module secara otomatis kita harus menambahkan perintah berikut pada file Route Utama.
Tambahkan baris berikut pada file app/Config/Routes.php letakan di baris terakhir :
$modules_path = ROOTPATH . 'Modules/';
$modules = scandir($modules_path);
foreach ($modules as $module) {
if ($module === '.' || $module === '..') {
continue;
}
if (is_dir($modules_path) . '/' . $module) {
$routes_path = $modules_path . $module . '/Routes.php';
if (file_exists($routes_path)) {
require $routes_path;
} else {
continue;
}
}
}
Lalu buat file Modules/Users/Routes.php dengan isi sbb :
group("user", ["namespace" => "\Modules\User\Controllers"], function ($routes) {
$routes->get("/", "UserController::index");
$routes->get("get_data", "UserController::get_data");
});
Route get_data nantinya akan digunakan untuk memanggil data dari database
Test Jalankan
Buka web browser http://yourdomain.com/user

Menambahkan Model
Setelah melakukan test percobaan Controller di atas, sekarang kita akan membuat Model, Buat folder dan tambahkan file Modules/User/Model/UserModel.php
Edit File Controller
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.
findAll();
$num_rows = count($data);
return $this->response->setJSON(array('total'=>$num_rows,'rows'=>$data));
}
}
Test Model
Buka web browser http://yourdomain.com/user/get_data
Catatan : Sebelumnya route sudah didefiniskan di file Modules/User/Routes.php
