CodeIgniter4: Konfigurasi Awal dan Pola MVC

5 minute read

Published:

Framework CodeIgniter menyediakan kerangka dasar yang kuat dan fleksibel untuk pengembangan aplikasi web berbasis PHP. Pada modul ini, kita mempelajari konfigurasi awal project CI4, penggunaan command line, migration dan seeder, pengaturan database, routing, pemanfaatan library-helper, serta implementasi pola MVC (Model-View-Controller).

Artikel ini menekankan satu hal penting: aplikasi yang baik bukan hanya berjalan, tetapi juga terstruktur. Dengan alur kerja berbasis CLI, konfigurasi berbasis environment, dan pemisahan tanggung jawab ala MVC, pengembangan menjadi lebih cepat, rapi, dan mudah dirawat.

1. Konfigurasi Awal di CodeIgniter 4

File konfigurasi utama tersimpan di folder app/Config. Selain konfigurasi bawaan, kita juga bisa membuat konfigurasi kustom.

Contoh membuat file config baru:

php spark make:config MySite

Contoh isi app/Config/MySite.php:

<?php

namespace Config;

use CodeIgniter\Config\BaseConfig;

class MySite extends BaseConfig
{
  public string $siteName = 'Web Unusia';
  public string $siteEmail = 'nama@gmail.com';
}

Lalu akses dari controller:

public function index()
{
  $config = config('MySite');
  echo "Selamat Datang di {$config->siteName}. Kirim kritik dan saran ke {$config->siteEmail}";
}

2. Environment Variables (.env)

CodeIgniter 4 menggunakan file .env untuk mengelola konfigurasi berdasarkan lingkungan (development, testing, production).

Keuntungan utama:

  • Nilai sensitif (misalnya password DB) tidak hardcoded di source code.
  • Mudah berpindah antar lingkungan tanpa mengubah banyak file.
  • Aman dan praktis untuk deploy.

Contoh pengaturan database di .env:

database.default.hostname = localhost
database.default.database = ci4
database.default.username = root
database.default.password = root 

jika anda menggunakan Windows biasanya bagian password dapat dikosongkan, atau jika anda menggunakan password tertentu bisa disesuiakan.

3. Command Line dengan php spark

CLI CodeIgniter membantu otomatisasi banyak pekerjaan.

Perintah penting:

php spark
php spark help migrate

Dengan help, kita bisa melihat:

  • Usage (cara pakai)
  • Description (fungsi perintah)
  • Options (opsi tambahan)

4. Migration: Mengelola Struktur Tabel

Migration memudahkan perubahan skema database secara terstruktur dan konsisten antar lingkungan.

Membuat migration:

php spark make:migration create_tasks_table

Contoh method up() dan down():

public function up()
{
  $this->forge->addField([
    'id' => [
      'type'           => 'INT',
      'constraint'     => 5,
      'unsigned'       => true,
      'auto_increment' => true,
    ],
    'name' => [
      'type'       => 'VARCHAR',
      'constraint' => '100',
    ],
    'description' => [
      'type' => 'TEXT',
      'null' => true,
    ],
    'done' => [
      'type'    => 'TINYINT',
      'default' => false,
    ],
  ]);

  $this->forge->addKey('id', true);
  $this->forge->createTable('tasks');
}

public function down()
{
  $this->forge->dropTable('tasks');
}

Menjalankan migration:

php spark migrate

Jika muncul error koneksi MySQL, pastikan:

  • konfigurasi .env benar,
  • host cocok (localhost atau 127.0.0.1),
  • service MySQL aktif.

5. Seeder: Menambahkan Data Awal/Dummy

Seeder digunakan untuk mengisi data awal secara otomatis.

Membuat seeder:

php spark make:seeder TaskSeeder

Contoh isi run():

public function run()
{
  $this->db->table('tasks')->insert([
    'name'        => 'Belajar CodeIgniter',
    'description' => 'CI merupakan framework PHP dengan konsep MVC.',
    'done'        => false,
  ]);
}

Jalankan seeder:

php spark db:seed TaskSeeder

6. Konfigurasi Database

Konfigurasi database utama ada di app/Config/Database.php. Namun praktik yang direkomendasikan adalah menyimpan nilai koneksi di .env agar lebih fleksibel.

Poin penting:

  • $defaultGroup menentukan grup koneksi default.
  • Kita bisa menambah grup lain, misalnya production.
  • Saat testing, konfigurasi bisa otomatis mengarah ke grup tests.

7. Routing

Routing mengatur pemetaan URI ke controller/method. Pengaturan utama ada di app/Config/Routes.php.

Contoh route manual:

$routes->get('task', 'TaskController::index');

Pada CI4 modern, auto routing tidak direkomendasikan untuk alasan keamanan. Karena itu, pemetaan route manual lebih dianjurkan.

8. Library dan Helper

CodeIgniter menyediakan utilitas siap pakai:

  • Library: fitur lebih kompleks (misalnya session).
  • Helper: fungsi-fungsi ringan (misalnya URL, text, form).

Contoh helper URL di CI4:

helper('url');
echo base_url('assets/css/style.css');

Membuat helper kustom:

php spark make:helper MyHelper

Contoh fungsi helper:

if (! function_exists('say_hello')) {
  function say_hello(string $name): string
  {
    return "Hello, {$name}! Welcome to CodeIgniter!";
  }
}

9. Pola MVC di CodeIgniter 4

MVC memisahkan aplikasi menjadi tiga komponen:

  • Model: mengelola data dan logika terkait database.
  • View: menampilkan antarmuka.
  • Controller: menerima request, memproses alur, menghubungkan model dan view.

A. Model

Buat model:

php spark make:model TaskModel

Contoh lengkap app/Models/TaskModel.php:

<?php

namespace App\Models;

use CodeIgniter\Model;

class TaskModel extends Model
{
  protected $table            = 'tasks';
  protected $primaryKey       = 'id';
  protected $useAutoIncrement = true;
  protected $returnType       = 'array';
  protected $useSoftDeletes   = false;
  protected $protectFields    = true;
  protected $allowedFields    = ['name', 'description', 'done'];
}

Pada tahap ini, model cukup digunakan untuk membaca data hasil migration dan seeder dengan method seperti findAll().

B. Controller

Buat controller:

php spark make:controller TaskController

Contoh lengkap app/Controllers/TaskController.php:

<?php

namespace App\Controllers;

use App\Controllers\BaseController;
use App\Models\TaskModel;

class TaskController extends BaseController
{
  public function index()
  {
    $taskModel = new TaskModel();
    $tasks = $taskModel->orderBy('id', 'DESC')->findAll();

    return view('v_task', [
      'title' => 'Task List',
      'tasks' => $tasks,
    ]);
  }
}

Tambahkan route agar method di atas bisa diakses:

$routes->get('task', 'TaskController::index');

C. View

Struktur view yang dipakai:

app/Views/
  v_task.php

Contoh lengkap app/Views/v_task.php:

<!DOCTYPE html>
<html lang="id">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title><?= esc($title) ?></title>
</head>
<body>
<h1><?= esc($title) ?></h1>

<p>Data berikut berasal dari tabel <code>tasks</code> yang telah dibuat lewat migration dan diisi lewat seeder.</p>

<?php if (empty($tasks)): ?>
  <p>Belum ada task.</p>
<?php else: ?>
  <ul>
    <?php foreach ($tasks as $task): ?>
      <li>
        <strong><?= esc($task['name']) ?></strong>
        <?php if (! empty($task['description'])): ?>
          - <?= esc($task['description']) ?>
        <?php endif; ?>
      </li>
    <?php endforeach; ?>
  </ul>
<?php endif; ?>

</body>
</html>

Pada tahap ini kita fokus satu view sederhana dulu. Konsep layout akan dibahas pada materi berikutnya.

10. Ringkasan

Bab ini menegaskan fondasi penting pengembangan web dengan CodeIgniter 4:

  • Konfigurasi aplikasi dan environment.
  • Pemakaian CLI untuk produktivitas.
  • Pengelolaan database via migration dan seeder.
  • Pengaturan route secara aman dan terstruktur.
  • Penerapan pola MVC untuk aplikasi modular.

Dengan menguasai bagian ini, proses pengembangan menjadi lebih sistematis, mudah diuji, dan lebih siap untuk skala aplikasi yang lebih besar.