31 Mar 2026 • Admin KhalimZone

Bikin REST API di CodeIgniter 4 — Dari Nol Sampai Production-Ready

Home / Blog / Tips CI4 yang Jarang Diketahui
CodeIgniter 4 Tips & Tricks Intermediate

7 Tips CodeIgniter 4 yang Jarang Diketahui — Tapi Bikin Kode Kamu Jauh Lebih Rapi

Khalim Tips & Tricks 8 menit baca

Udah bisa setup CI4 dan bikin CRUD dasar? Bagus. Tapi banyak developer — bahkan yang udah lama pakai CI4 — masih sering skip fitur-fitur yang sebenernya bisa bikin kode mereka jauh lebih clean dan efisien.

Ini 7 tips yang gue temuin pas ngembangin project CI4, yang jarang banget dibahas di tutorial-tutorial biasa.

Tips & Tricks
01 Pakai php spark buat generate file otomatis

Kebanyakan developer CI4 bikin Controller, Model, dan Migration secara manual. Padahal CI4 punya Spark CLI yang bisa generate semuanya dalam hitungan detik.

bash
# Generate Controller php spark make:controller NamaController # Generate Model php spark make:model NamaModel # Generate Migration php spark make:migration CreateNamaTable # Generate semuanya sekaligus php spark make:controller NamaController --restful

Flag --restful langsung generate Controller dengan method index, show, create, update, dan delete yang siap diisi.

02 Gunakan $this->validate() langsung di Controller

Banyak yang masih validasi form pakai cara manual. CI4 punya validation built-in yang bisa dipanggil langsung dari Controller — lebih clean dan mudah dibaca.

php
public function store() { if (!$this->validate([ 'nama' => 'required|min_length[3]', 'email' => 'required|valid_email|is_unique[users.email]', 'umur' => 'required|integer|greater_than[17]', ])) { return redirect()->back()->withInput()->with('errors', $this->validator->getErrors()); } // lanjut proses simpan data }
💡

Rule is_unique[users.email] langsung ngecek ke database apakah email sudah terdaftar. Praktis banget buat registrasi user.

03 Manfaatin $allowedFields di Model buat keamanan

Kalau kamu langsung passing $_POST ke Model tanpa filter, itu rawan mass assignment attack. Selalu define $allowedFields di Model kamu.

app/Models/UserModel.php
class UserModel extends Model { protected $table = 'users'; protected $primaryKey = 'id'; // Hanya field ini yang boleh diisi via insert/update protected $allowedFields = [ 'nama', 'email', 'password', 'role' ]; // Otomatis isi created_at & updated_at protected $useTimestamps = true; }

Dengan ini, field seperti is_admin atau balance yang tidak ada di $allowedFields otomatis diabaikan meski dikirim via form.

04 Pakai Filter buat proteksi route — bukan cek session di tiap Controller

Pola yang sering gue liat: developer ngecek session()->get('user') di awal setiap method Controller. Ini redundant. Pakai Filter CI4 buat handle auth di satu tempat.

app/Filters/AuthFilter.php
class AuthFilter implements FilterInterface { public function before(RequestInterface $request, $arguments = null) { if (!session()->get('user_id')) { return redirect()->to('/login'); } } }

Daftarin di app/Config/Filters.php, terus assign ke route yang butuh auth:

app/Config/Routes.php
$routes->group('dashboard', ['filter' => 'auth'], function($routes) { $routes->get('/', 'Dashboard::index'); $routes->get('profile', 'Dashboard::profile'); });
05 Gunakan helper() global buat fungsi yang sering dipakai

Kalau ada fungsi yang sering dipanggil di mana-mana — misalnya format tanggal, rupiah, atau generate kode unik — jangan duplikat. Buat helper sendiri.

app/Helpers/format_helper.php
if (!function_exists('rupiah')) { function rupiah($angka): string { return 'Rp ' . number_format($angka, 0, ',', '.'); } }

Load helper-nya di BaseController atau autoload via app/Config/Autoload.php supaya langsung tersedia di semua tempat tanpa perlu load manual tiap Controller.

app/Config/Autoload.php
public $helpers = ['format'];
06 Aktifin CI_ENVIRONMENT = development buat debug lebih mudah

Kalau kamu dapet error tapi halamannya cuma blank putih, besar kemungkinan environment kamu masih production. Pastiin file .env kamu udah set ke development.

.env
CI_ENVIRONMENT = development
⚠️

Jangan lupa ganti ke production sebelum deploy ke server live. Mode development menampilkan detail error yang tidak aman untuk dilihat publik.

Di mode development, CI4 akan tampilkan stack trace lengkap, query yang dijalankan, dan info debug lainnya langsung di browser.

07 Pakai $db->getLastQuery() buat debug query SQL

Sering bingung kenapa data yang ditarik dari database gak sesuai ekspektasi? Tampilin query yang beneran dijalankan CI4 langsung di browser.

php
$db = db_connect(); $result = $db->table('users') ->where('status', 'active') ->get(); // Tampilin query yang baru aja dijalankan dd((string) $db->getLastQuery());

Fungsi dd() (dump and die) adalah helper bawaan CI4 — langsung print variabel dengan format yang readable dan stop eksekusi. Jauh lebih praktis dari var_dump() + die().


Penutup

7 tips ini sebenernya fitur bawaan CI4 yang udah ada dari sananya — cuma jarang dieksplor. Coba terapin satu per satu di project kamu dan rasain bedanya: kode lebih clean, lebih aman, dan lebih gampang di-maintain. Di artikel berikutnya gue bakal bahas cara bikin REST API di CI4 dari nol — stay tuned!