Codeigniter 4.x Modules

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

				
					<h4>This is User Module</h4>
				
			

Edit Controller

Buka file Modules/User/Controllers/UserController.php

				
					<?php

namespace Modules\User\Controllers;

use App\Controllers\BaseController;

class UserController extends BaseController
{
    public function index()
	{
		return view("\Modules\User\Views\sample_view");
	}
}

				
			

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 :

				
					<?php
$routes->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

				
					<?php

namespace Modules\User\Models;

use CodeIgniter\Model;

class UserModel extends Model
{
    protected $DBGroup          = 'default';
    protected $table            = 'users';
    protected $primaryKey       = 'id';
    protected $useAutoIncrement = true;
    protected $insertID         = 0;
    protected $returnType       = 'array';
    protected $useSoftDeletes   = false;
    protected $protectFields    = true;
    protected $allowedFields    = ['username','status','status_message','active'];

    // Dates
    protected $useTimestamps = false;
    protected $dateFormat    = 'datetime';
    protected $createdField  = 'created_at';
    protected $updatedField  = 'updated_at';
    protected $deletedField  = 'deleted_at';

    // Validation
    protected $validationRules      = [];
    protected $validationMessages   = [];
    protected $skipValidation       = false;
    protected $cleanValidationRules = true;

    // Callbacks
    protected $allowCallbacks = true;
    protected $beforeInsert   = [];
    protected $afterInsert    = [];
    protected $beforeUpdate   = [];
    protected $afterUpdate    = [];
    protected $beforeFind     = [];
    protected $afterFind      = [];
    protected $beforeDelete   = [];
    protected $afterDelete    = [];
}

				
			

Edit File Controller

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.

				
					<?php

namespace Modules\User\Controllers;

use App\Controllers\BaseController;

class UserController extends BaseController
{
    public function index()
	{
		return view("\Modules\User\Views\sample_view");
	}
  
    public function get_data()
	{
		$dataModel = new \Modules\User\Models\UserModel();
		$data = $dataModel->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