CodeIgniter 4 hadir dengan struktur yang lebih modern dan fleksibel dibanding versi sebelumnya. Salah satu pendekatan arsitektur yang sering digunakan untuk membangun aplikasi besar dengan pemisahan modul yang baik adalah HMVC (Hierarchical Model-View-Controller).
HMVC memungkinkan pengembang membagi aplikasi menjadi modul independen, sehingga setiap bagian memiliki Controller, Model, dan View sendiri. Dengan pendekatan ini, kode menjadi lebih modular, reusable, dan scalable.
Pada artikel ini, kita akan membahas cara mengimplementasikan HMVC di CodeIgniter 4, mulai dari struktur folder, konfigurasi autoloading PSR-4, hingga contoh penggunaan.
Pengertian HMVC
HMVC adalah arsitektur berbasis MVC, tetapi setiap bagian proyek terbagi ke dalam modul independen. Ini membantu dalam pemisahan fitur, sehingga pengembangan menjadi lebih mudah dan terorganisir.
Keuntungan Menggunakan HMVC
✅ Modularitas – Setiap fitur aplikasi bisa dikelola secara terpisah dalam modul.
✅ Reusability – Modul dapat digunakan kembali tanpa harus menulis ulang kode.
✅ Kemudahan Pengelolaan – Mempermudah pengembangan proyek besar dengan tim.
✅ Scalability – Memungkinkan ekspansi sistem tanpa harus merombak seluruh arsitektur.
Struktur Folder HMVC
Di CodeIgniter 4, kita dapat membuat struktur modul HMVC dalam folder app/Modules/
. Berikut contoh struktur proyek dengan HMVC:
app/
├── Modules/
│ ├── Admin/
│ │ ├── Config/
│ │ │ ├── Routes.php
│ │ ├── Controllers/
│ │ │ ├── AdminController.php
│ │ ├── Models/
│ │ │ ├── AdminModel.php
│ │ ├── Views/
│ │ │ ├── admin.php
│ ├── Blog/
│ │ ├── Config/
│ │ │ ├── Routes.php
│ │ ├── Controllers/
│ │ │ ├── PostController.php
│ │ ├── Models/
│ │ │ ├── PostModel.php
│ │ ├── Views/
│ │ │ ├── post_list.php
Setiap modul memiliki Controller, Model, dan View sendiri, sehingga kode lebih terstruktur dan mudah dikelola.
Konfigurasi PSR-4 untuk Modul HMVC
Agar CodeIgniter mengenali modul tanpa perlu menuliskan path lengkap, kita harus mengatur PSR-4 autoloading.
Buka file app/Config/Autoload.php
dan tambahkan modul ke dalam $psr4
:
public $psr4 = [
'App' => APPPATH,
'Modules' => APPPATH . 'Modules'
];
Membuat Routes
Buat file Routes.php di dalam app/Modules/Blog/Config/Routes.php
:
<?php
namespace Modules\Blog\Config;
use CodeIgniter\Router\RouteCollection;
class Routes {
public static function defineRoutes(RouteCollection $routes) {
$routes->group('/blog', ['namespace' => 'Modules\Blog\Controllers'], function($routes) {
$routes->get('/', 'PostController::index');
});
}
}
Mengatur Routes
Buka Routes pada app/Config/Routes.php
dan tambahkan dua baris paling bawah sehingga isi routes menjadi seperti berikut:
<?php
use CodeIgniter\Router\RouteCollection;
/**
* @var RouteCollection $routes
*/
$routes->get('/', 'Home::index');
$routes->get('user', 'Home::index');
use Modules\Blog\Config\Routes as CarRoutes;
CarRoutes::defineRoutes($routes);
Membuat Controller
Sekarang kita buat Controller di app/Modules/Blog/Controllers/PostController.php
namespace Modules\Blog\Controllers;
use CodeIgniter\Controller;
use Modules\Blog\Models\PostModel;
class PostController extends Controller
{
public function index()
{
$model = new PostModel();
$data['posts'] = $model->getPosts();
return view('Modules\Blog\Views\post_list', $data);
}
}
Model dan Views
Membuat model dan view sama seperti dalam MVC biasa, tinggal disesuaikan namespace dan panggil nya.