Modul Codeigniter Crud
Modul Codeigniter Crud
1. Pendahuluan
1.1 Tujuan Pembelajaran
Setelah menyelesaikan modul ini, peserta didik diharapkan mampu:
➢ Memahami konsep dasar sistem register, login, dan CRUD dalam pengembangan
aplikasi web.
➢ Menguasai dasar-dasar penggunaan framework CodeIgniter 4 untuk membangun
aplikasi berbasis web.
➢ Membuat sistem manajemen pengguna dengan berbagai level akses (seperti admin
dan user biasa).
➢ Mengintegrasikan template Bootstrap untuk menciptakan antarmuka pengguna
yang modern dan responsif.
➢ Membuat aplikasi berbasis web dengan struktur kode yang terorganisir, aman, dan
dapat diandalkan.
Dalam modul ini, peserta tidak hanya belajar cara membuat sistem login dan CRUD,
tetapi juga memahami konsep pengelolaan data pengguna, implementasi validasi
keamanan, dan penggunaan teknologi web modern untuk mendukung pengembangan
aplikasi berbasis CodeIgniter 4.
1.2 Sasaran Pembelajaran
Modul ini dirancang untuk peserta dengan latar belakang sebagai berikut:
➢ Pemahaman Dasar tentang PHP
Peserta perlu memahami sintaks dasar PHP, seperti penggunaan variabel, fungsi,
kondisi, dan loop.
➢ Pengetahuan tentang Pemrograman Berorientasi Objek (OOP)
Karena CodeIgniter 4 sangat bergantung pada prinsip OOP, peserta perlu memahami
konsep dasar seperti class, objek, inheritance, dan encapsulation.
➢ Pemahaman Konsep MVC (Model-View-Controller)
CodeIgniter 4 menggunakan pola MVC sebagai dasar arsitektur. Peserta diharapkan
memahami alur kerja pola ini.
➢ Dasar-Dasar HTML, CSS, dan Bootstrap
Pengetahuan tentang HTML dan CSS diperlukan untuk membangun antarmuka
web, sementara Bootstrap digunakan untuk meningkatkan responsivitas tampilan.
➢ Pengetahuan Dasar tentang Database
Peserta diharapkan memahami konsep dasar database relasional, seperti cara
membuat tabel, dan menjalankan query SQL dasar seperti SELECT, INSERT,
UPDATE, dan DELETE.
1.3 Prasyarat
2
Sebelum memulai modul ini, peserta perlu menyiapkan alat-alat berikut:
➢ Code Editor: Disarankan menggunakan Visual Studio Code atau Sublime Text untuk
menulis kode.
➢ Web Server Lokal: Gunakan XAMPP, WAMP, atau Laragon untuk pengujian
aplikasi di lingkungan lokal.
➢ Web Browser: Gunakan Google Chrome atau Mozilla Firefox untuk menguji hasil
pengembangan.
➢ Framework CodeIgniter 4: Unduh versi terbaru dari CodeIgniter 4 dari situs resmi
CodeIgniter.
➢ Bootstrap: Unduh Bootstrap dari situs resminya atau gunakan CDN untuk
mempermudah integrasi.
➢ Template Admin (Opsional): Untuk manajemen pengguna, gunakan template admin
seperti AdminLTE atau Nice Admin, yang tersedia secara gratis di platform seperti
bootstrapmade.com.
2. Materi Pembelajaran
2.1 Pengenalan Framework CodeIgniter 4
A. Pengertian Codeigniter 4
CodeIgniter 4 adalah framework PHP berbasis Model-View-Controller (MVC)
yang dirancang untuk mempermudah pengembangan aplikasi web. Framework ini
dikenal karena kecepatan, ringan, dan kesederhanaannya, sehingga cocok untuk
pengembang pemula maupun profesional. CodeIgniter menyediakan struktur yang
rapi untuk membangun aplikasi, dengan fitur-fitur keamanan bawaan dan
kompatibilitas tinggi terhadap berbagai teknologi web.
B. Keunggulan CodeIgniter 4
a) Ringan dan Cepat
CodeIgniter 4 memiliki ukuran yang kecil dan waktu muat yang cepat,
menjadikannya ideal untuk aplikasi dengan kebutuhan performa tinggi.
b) Dokumentasi Lengkap
Dokumentasi resmi CodeIgniter sangat terperinci dan mudah dipahami,
membantu pengembang dalam mempelajari dan mengimplementasikan fitur-
fitur yang tersedia.
c) Kompatibilitas Tinggi
Mendukung berbagai versi PHP (7.4 ke atas) dan database seperti MySQL,
PostgreSQL, dan SQLite.
d) Keamanan Bawaan
3
CodeIgniter menyediakan perlindungan terhadap ancaman umum seperti SQL
Injection, Cross-Site Scripting (XSS), dan Cross-Site Request Forgery (CSRF).
e) Pola MVC yang Terstruktur
Memisahkan logika aplikasi (Model), kontrol alur kerja (Controller), dan
antarmuka pengguna (View), sehingga mempermudah pemeliharaan dan
pengembangan aplikasi.
f) Mudah Dipelajari
Sintaksis sederhana dan fleksibilitas yang tinggi memudahkan pengembang
pemula untuk menguasainya.
C. Pola Arsitektur MVC (Model-View-Controller)
Pola arsitektur MVC (Model-View-Controller) adalah pendekatan desain yang
memisahkan aplikasi menjadi tiga komponen utama, yaitu Model, View, dan
Controller. Pemisahan ini bertujuan untuk meningkatkan struktur aplikasi, membuat
kode lebih mudah dipelihara, dan mendukung pengembangan yang efisien.
Di dalam MVC sendiri terdapat beberapa komponen diantaranya:
1) Model
Model memiliki tugas utama dalam mengelola data aplikasi dan logika
bisnis. Dalam menjalankan fungsinya, model berinteraksi langsung dengan
database untuk melakukan berbagai operasi seperti mengambil, menyimpan,
memperbarui, dan menghapus data. Salah satu keunggulan dari pendekatan ini
adalah pemusatan logika bisnis di satu tempat, sehingga memudahkan proses
pembaruan jika terjadi perubahan pada aturan bisnis yang berlaku. Contoh
Tugas:
a. Validasi data sebelum disimpan ke database.
b. Menyediakan data yang diolah dari database untuk Controller.
2) View
View memiliki tugas utama dalam menampilkan data kepada pengguna
melalui antarmuka yang dirancang khusus. Dalam menjalankan perannya,
View menerima data dari Controller dan menyajikannya dengan cara yang
mudah dipahami oleh pengguna. Salah satu keunggulan dari pendekatan ini
adalah pemisahan antara tampilan dan logika bisnis, memungkinkan
perubahan desain antarmuka dilakukan tanpa memengaruhi fungsionalitas
aplikasi. Contoh Tugas:
a. Menampilkan daftar produk dalam format HTML.
b. Mengatur tata letak dan gaya antarmuka menggunakan CSS.
4
3) Controller
Controller berfungsi sebagai penghubung antara Model dan View dalam
sebuah aplikasi. Ketika pengguna mengajukan permintaan, Controller akan
menerimanya, memprosesnya, dan menentukan tindakan yang harus
dilakukan. Data yang dibutuhkan akan diambil dari Model, lalu hasil
pemrosesan dikirimkan ke View untuk ditampilkan kepada pengguna.
Pendekatan ini memiliki keunggulan dalam memisahkan logika kontrol dari
logika bisnis dan tampilan, sehingga pengelolaan aplikasi menjadi lebih
terstruktur dan mudah dilakukan. Contoh Tugas:
a. Mengambil data produk dari Model dan meneruskannya ke View.
b. Memproses input pengguna, seperti data yang diisi pada formulir.
Kemudian, dalam MVC juga terdapat diagram alur atau alur kerja dari MVC
sendiri. Berikut adalah diagram alur dari MVC:
5
2. Controller
Permintaan dari pengguna diterima oleh Controller, yang bertugas memproses
permintaan tersebut dan menentukan tindakan yang harus dilakukan.
3. Model
Controller berinteraksi dengan Model untuk mengambil atau memanipulasi
data yang diminta. Model kemudian menghubungkan data ke database jika
diperlukan.
4. Database
Model mengambil atau menyimpan data yang diminta pada database sesuai
kebutuhan.
5. Processes Data
Data yang diperoleh dari Model diolah lebih lanjut oleh Controller.
6. View
Hasil akhir dikirim oleh Controller ke View, yang bertugas menampilkan data
tersebut kepada pengguna dalam format yang mudah dipahami.
A. Instalasi XAMPP/WAMP
Langkah pertama adalah memasang server lokal yang mencakup Apache (web
server), MySQL (database), dan PHP (bahasa pemrograman).
a) Unduh dan Instal:
• XAMPP: Download XAMPP
b) Konfigurasi:
• Pastikan Apache dan MySQL berjalan setelah instalasi.
6
• Akses melalui http://localhost/ pada browser.
c) Cek Versi PHP: Pastikan versi PHP yang terinstal adalah 7.4 atau lebih tinggi,
karena CodeIgniter 4 membutuhkan PHP versi tersebut.
B. Install dan Konfigurasi CodeIgniter
Setelah server lokal terpasang, unduh CodeIgniter 4 dan siapkan proyek yang akan
dibuat.
a) Unduh composer dan CodeIgniter:
1. Unduh melalui link berikut;
https://drive.google.com/drive/folders/187UJ28s1vtpefXvyMffyAtFKAzm
mc8pR?usp=sharing
2. Install composer
3. Extract codeigniter framework 4, pindahkan file ke dalam folder
C:\xampp\htdocs
4. Buka command prompt, masuk ke dalam direktori
C:\xampp\htdocs\codeigniter4-framework-2849e7f jalankan kode dibawah
ini.
7
9. Coba buka web browser dan arahkan ke alamat http://localhost:8080, maka
hasilnya:
b) Menyiapkan Database
Database diperlukan untuk menyimpan data aplikasi, seperti pengguna, artikel,
atau produk.
1. Buka phpMyAdmin: Akses melalui http://localhost/phpmyadmin.
2. Buat Database Baru: Klik tombol New di sidebar.
Masukkan nama database (contoh: ci_app) dan klik Create.
3. Konfigurasi Database di CodeIgniter: Buka file app/Config/Database.php.
Atur koneksi database sesuai dengan yang telah dibuat:
php
public $default = [
'DSN' => '',
'hostname' => 'localhost',
'username' => 'root',
'password' => '',
'database' => 'ci_app',
'DBDriver' => 'MySQLi',
'DBPrefix' => '',
'pConnect' => false,
'DBDebug' => (ENVIRONMENT !==
'production'),
'cacheOn' => false,
'cacheDir' => '',
8
'charset' => 'utf8',
'DBCollat' => 'utf8_general_ci',
'swapPre' => '',
'encrypt' => false,
'compress' => false,
'strictOn' => false,
'failover' => [],
'port' => 3306,
];
4. Uji Koneksi Database: Jalankan perintah migrasi atau buat koneksi awal
untuk memastikan konfigurasi database berhasil.
2.3 Membuat Sistem Login dan Registrasi
A. Desain Database untuk Sistem Login
Untuk mendukung sistem login yang aman dan efisien, berikut adalah desain tabel
users yang dapat digunakan:
a) Struktur tabel
9
Model adalah komponen yang bertanggung jawab untuk berinteraksi dengan
database, termasuk pengelolaan data pengguna. Dalam CodeIgniter 4, model dibuat
dengan memperluas kelas CodeIgniter\Model. Langkah Membuat Model
UserModel
a) Buat file UserModel.php di direktori app/Models/. Dengam menjalankan kode
berikut:
php spark make:model UsersModel
// Dates
10
protected $useTimestamps = true;
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 = [];
}
C. Membuat Controller untuk Autentikasi
Controller adalah bagian dari pola Model-View-Controller (MVC) yang
berfungsi untuk menangani logika aplikasi. Pada modul ini, kita akan belajar cara
membuat Controller untuk Autentikasi pengguna, meliputi proses login, registrasi,
dan logout. Controller yang akan dibuat akan mencakup tiga metode utama:
• register(): Untuk mendaftarkan pengguna baru.
• login(): Untuk menangani proses login.
• logout(): Untuk mengakhiri sesi pengguna.
a) Membuat Controller
Buat controller bernama Register dan Login menggunakan perintah berikut di
terminal:
php spark make:controller Register
php spark make:controller Login
File ini akan otomatis dibuat di direktori app/Controllers/
11
b) Implementasi Metode register()
Metode ini digunakan untuk menangani pendaftaran pengguna baru:
<?php namespace App\Controllers;
use CodeIgniter\Controller;
use App\Models\UsersModel;
12
$model->save($data);
return redirect()->to('/login');
}else{
$data['validation'] = $this->validator;
echo view('register', $data);
}
}
}
c) Implementasi Metode login()
Metode ini digunakan untuk memvalidasi kredensial login dan menyimpan
data pengguna ke dalam sesi:
<?php namespace App\Controllers;
use CodeIgniter\Controller;
use App\Models\UsersModel;
13
'username' => $data['username'],
'email' => $data['email'],
'logged_in' => TRUE
];
$session->set($ses_data);
return redirect()->to('/dashboard');
}else{
$session->setFlashdata('msg', 'Wrong Password');
return redirect()->to('/login');
}
}else{
$session->setFlashdata('msg', 'Email not Found');
return redirect()->to('/login');
}
}
14
namespace App\Filters;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use CodeIgniter\Filters\FilterInterface;
//--------------------------------------------------------------------
15
'performance' => PerformanceMetrics::class,
'auth'=> \App\Filters\Auth::class
];
f) Membuat routes untuk login, register dan logout
Dalam CodeIgniter, routes (rute) adalah cara untuk mengarahkan URL yang
diminta oleh pengguna ke controller dan metode yang sesuai dalam aplikasi.
Routing membantu dalam menangani permintaan URL, dan menentukan
bagaimana aplikasi merespons URL tersebut dengan menjalankan controller
dan metode yang tepat. Untuk mengatur routes di CodeIgniter dapat dilakukan
dalam folder app/config/routes.php. Buat routes yang ingin dipakai seperti di
bawah ini:
16
adalah pemberian umpan balik (feedback) kepada pengguna, seperti menampilkan
pesan sukses setelah registrasi berhasil atau pesan kesalahan saat login gagal. View
dalam CodeIgniter dirancang untuk terintegrasi dengan sistem templating
framework, mempermudah pengembang menyusun struktur UI yang konsisten di
seluruh halaman aplikasi.
a) Membuat View untuk Registrasi
Buat file register.php di folder app/Views.
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-
scale=1">
<!-- Bootstrap CSS -->
<link rel="stylesheet"
href="https://stackpath.bootstrapcdn.com/bootstrap/5.0.0-
alpha1/css/bootstrap.min.css"
integrity="sha384-
r4NyP46KrjDleawBgD5tp8Y7UzmLA05oM1iAEQ17CSuDqnUK
2+k9luXQOfXJCJ4I" crossorigin="anonymous">
<title>Register</title>
</head>
<body>
<div class="container">
<div class="row justify-content-md-center">
<div class="col-6">
<h1>Sign Up</h1>
<?php if(isset($validation)):?>
<div class="alert alert-danger"><?= $validation-
>listErrors() ?></div>
<?php endif;?>
<form action="/register/save" method="post">
17
<div class="mb-3">
<label for="InputForName" class="form-
label">Name</label>
<input type="text" name="name" class="form-control"
id="InputForName"
value="<?= set_value('name') ?>">
</div>
<div class="mb-3">
<label for="InputForEmail" class="form-label">Email
address</label>
<input type="email" name="email" class="form-
control" id="InputForEmail"
value="<?= set_value('email') ?>">
</div>
<div class="mb-3">
<label for="InputForPassword" class="form-
label">Password</label>
<input type="password" name="password"
class="form-control" id="InputForPassword">
</div>
<div class="mb-3">
<label for="InputForConfPassword" class="form-
label">Confirm Password</label>
<input type="password" name="confpassword"
class="form-control" id="InputForConfPassword">
</div>
<button type="submit" class="btn btn-
primary">Register</button>
</form>
</div>
</div>
</div>
18
integrity="sha384-
Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3Uksd
QRVvoxMfooAo" crossorigin="anonymous">
</script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/5.0.0-
alpha1/js/bootstrap.min.js"
integrity="sha384-
oesi62hOLfzrys4LxRF63OJCXdXDipiYWBnvTl9Y9/TRlw5xlKIE
HpNyvvDShgf/" crossorigin="anonymous">
</script>
</body>
</html>
b) Membuat View untuk Login
Buat file login.php di folder app/Views.
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-
scale=1">
<!-- Bootstrap CSS -->
<link rel="stylesheet"
href="https://stackpath.bootstrapcdn.com/bootstrap/5.0.0-
alpha1/css/bootstrap.min.css"
integrity="sha384-
r4NyP46KrjDleawBgD5tp8Y7UzmLA05oM1iAEQ17CSuDqnUK
2+k9luXQOfXJCJ4I" crossorigin="anonymous">
<title>Login</title>
</head>
<body>
<div class="container">
<div class="row justify-content-md-center">
19
<div class="col-6">
<h1>Sign In</h1>
<?php if(session()->getFlashdata('msg')):?>
<div class="alert alert-danger"><?= session()-
>getFlashdata('msg') ?></div>
<?php endif;?>
<form action="/login/auth" method="post">
<div class="mb-3">
<label for="InputForEmail" class="form-label">Email
address</label>
<input type="email" name="email" class="form-
control" id="InputForEmail"
value="<?= set_value('email') ?>">
</div>
<div class="mb-3">
<label for="InputForPassword" class="form-
label">Password</label>
<input type="password" name="password"
class="form-control" id="InputForPassword">
</div>
<button type="submit" class="btn btn-
primary">Login</button>
</form>
<div class="mt-3">
<p>Belum punya akun? <a href="/register">Daftar
sekarang</a></p>
</div>
</div>
</div>
</div>
20
integrity="sha384-
Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3Uksd
QRVvoxMfooAo" crossorigin="anonymous">
</script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/5.0.0-
alpha1/js/bootstrap.min.js"
integrity="sha384-
oesi62hOLfzrys4LxRF63OJCXdXDipiYWBnvTl9Y9/TRlw5xlKIE
HpNyvvDShgf/" crossorigin="anonymous">
</script>
</body>
</html>
<head>
<meta charset="utf-8">
21
<meta name="viewport" content="width=device-width, initial-
scale=1, shrink-to-fit=no">
<meta name="description" content="">
<meta name="author" content="Mark Otto, Jacob Thornton, and
Bootstrap contributors">
<meta name="generator" content="Jekyll v4.1.1">
<title>Halaman Admin</title>
<link rel="canonical"
href="https://getbootstrap.com/docs/4.5/examples/sticky-footer-
navbar/">
<style>
.bd-placeholder-img {
font-size: 1.125rem;
text-anchor: middle;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
22
<link href="https://getbootstrap.com/docs/4.5/examples/sticky-
footer-navbar/sticky-footer-navbar.css"
rel="stylesheet">
</head>
<li class="nav-item">
<a class="nav-link" href="/galeri">Galeri</a>
23
</li>
<li class="nav-item">
<a class="nav-link" href="/pegawai">Pegawai</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/alumni">Testimoni</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/login/logout">Logout</a>
</li>
</ul>
</div>
</nav>
</header>
b) Kode program dalam layout/footer.php
<footer class="footer mt-auto py-3">
<div class="footer-bottom"
style="text-align: center; background-color: rgba(200, 200, 200,
0.8); color: #000; padding: 10px; border-top: 1px solid rgba(150, 150,
150, 0.8); margin-top: 10px;">
<p>© 2024 CV. MADURA TECHNOVATION.
</p>
</div>
</footer>
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"
integrity="sha384-
DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVY
Uew+OrCXaRkfj" crossorigin="anonymous">
</script>
<script
src="https://getbootstrap.com/docs/4.5/dist/js/bootstrap.bundle.min.js
"
integrity="sha384-
ho+j7jyWK8fNQe+A12Hb8AhRq26LrZ/JpcUGGOn+Y7RsweNrtN/
tE3MoK7ZeZDyx" crossorigin="anonymous">
</script>
</body>
24
</html>
c) Kode program dalam layout/template.php
<!-- Begin page content -->
<?php include 'header.php'; ?>
<main role="main" class="flex-shrink-0">
<?= $this->renderSection('content') ?>
</main>
<?php include 'footer.php'; ?>
d) Kode program dalam dashboard/index.php
<?= $this->extend('layout/template'); ?>
<?= $this->section('content'); ?>
<div class="container">
<div class="card">
<div class="card-header">
<h3>Selamat Datang Di Halaman Admin</h3>
</div>
<div class="card-body">
<h3>Hello, <?= session()->get('username'); ?></h3>
</div>
</div>
</div>
<?= $this->endSection('content'); ?>
e) Membuat fungsi untuk menampilkan dashboar pada controller, kode yang
digunakan adalah sebagai berikut:
<?php namespace App\Controllers;
use CodeIgniter\Controller;
use App\Models\PegawaiModel;
class Dashboard extends Controller
{
protected $pegawai;
function __construct()
{
$this->pegawai = new PegawaiModel();
}
public function index(): string
{
25
$session = session();
$data['pegawai'] = $this->pegawai->findAll();
return view('Dashboard/index', $data);
}
}
f) Membuat routes untuk dashboard
26
c) Update
Sesuai dengan namanya, fungsi dari update adalah untuk mengupdate atau
memperbaharui data yang sudah ada dalam database.
d) Delete
Fungsi yang terakhir adalah fungsi delete. Fungsi delete dalam CRUD yaitu
untuk menghapus database maupun data atau record yang berada di database.
B. Persiapan CRUD
1. Membuat Migration
Migration digunakan untuk membuat dan memodifikasi tabel dalam
database. Untuk membuat migration pada CodeIgniter 4, kita bisa membuat file
migration yang nantinya disimpan di folder app/Database/Migrations. Kita
dapat membuat file migration menggunakan perintah pada CLI CodeIgniter:
php spark make:migration Pegawai
Perintah di atas akan membuat file migration baru di folder
app/Database/Migrations. Nama file migration akan mengikuti format
timestamp, seperti 2024-12-11-093818_Pegawai.php
Untuk mengedit file migration, buka file migration yang baru dibuat dan
tentukan skema tabelnya. Misalnya, kita ingin membuat tabel pegawai dengan
beberapa kolom seperti id_pegawai, nama, email, dll. Tambahkan kode
dibawah ini:
<?php
namespace App\Database\Migrations;
use CodeIgniter\Database\Migration;
class Pegawai extends Migration
{
public function up()
{
$this->forge->addField([
'id_pegawai' => [
'type' => 'INT',
'constraint' => 11,
'unsigned' => true,
'auto_increment' => true,
],
'nama' => [
'type' => 'VARCHAR',
'constraint' => '255',
27
],
'jabatan' => [
'type' => 'VARCHAR',
'constraint' => '255',
],
'jenis_kelamin' => [
'type' => 'VARCHAR',
'constraint' => '255',
],
'no_telp' => [
'type' => 'VARCHAR',
'constraint' => '100',
],
'email' => [
'type' => 'VARCHAR',
'constraint' => '100',
],
'alamat' => [
'type' => 'TEXT',
'constraint' => '255',
],
'foto' => [
'type' => 'VARCHAR',
'constraint' => '255',
],
'created_at' => [
'type' => 'DATETIME',
'null' => true, // CodeIgniter mengisi nilai ini
],
'updated_at' => [
'type' => 'DATETIME',
'null' => true, // CodeIgniter mengisi nilai ini
]
]);
$this->forge->addPrimaryKey('id_pegawai');
$this->forge->createTable('pegawai');
}
28
public function down()
{
$this->forge->dropTable('pegawai');
}
}
29
{
public function run()
{
$data = [
[
'nama' => 'Anton',
'jabatan' => 'Manager',
'jenis_kelamin' => 'pria',
'no_telp' => '081234555678',
'email' => '[email protected]',
'alamat' => 'Jl. Mawar Putih No. 190, Waru Sidoarjo',
'foto' => 'anton.jpg',
],
[
'nama' => 'Budi',
'jabatan' => 'Staff',
'jenis_kelamin' => 'pria',
'no_telp' => '081234555679',
'email' => '[email protected]',
'alamat' => 'Jl. Anggrek No. 50, Surabaya',
'foto' => 'budi.jpg',
],
[
'nama' => 'Siti',
'jabatan' => 'Sekretaris',
'jenis_kelamin' => 'wanita',
'no_telp' => '081234555680',
'email' => '[email protected]',
'alamat' => 'Jl. Kenanga No. 123, Gubeng Surabaya',
'foto' => 'siti.jpg',
]
];
$this->db->table('pegawai')->insertBatch($data);
}
}
30
run(): Digunakan untuk menentukan data yang akan dimasukkan ke dalam
tabel.
insertBatch(): Digunakan untuk memasukkan data secara massal (bulk insert).
Setelah membuat file seeder, jalankan seeder untuk mengisi tabel users
dengan data:
php spark db:seed PegawaiSeeder
Ini akan memasukkan data yang sudah ditentukan ke dalam tabel users.
Kita juga dapat menjalankan beberapa seeder secara bersamaan jika diperlukan:
php spark db:seed UserSeeder,AnotherSeeder
Dengan mengikuti langkah-langkah di atas, kita dapat membuat dan
mengelola Migration dan Seeder di CodeIgniter 4. Migration membantu kita
mengelola struktur tabel database, sementara Seeder memungkinkan kita untuk
mengisi tabel dengan data awal atau dummy data.
31
protected $useSoftDeletes = false;
protected $protectFields = true;
protected $allowedFields = ['username', 'password',
'email', 'created_at', 'updated_at'];
// Dates
protected $useTimestamps = true;
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 = [];
}
32
Php spark migrate
Perintah php spark migrate berfungsi untuk menjalankan semua migration
yang belum dijalankan pada aplikasi CodeIgniter 4. Artinya, jika Anda telah
menulis beberapa file migration dan ada yang belum dieksekusi (misalnya,
tabel baru atau perubahan struktur tabel), perintah ini akan menjalankannya
untuk Anda.
33
4. Fungsi code_tambah untuk menyimpan data pegawai dan mengupload foto
public function code_tambah()
{
$validationRule = [
'foto' => [
'label' => 'Image File',
'rules' => 'uploaded[foto]'
. '|is_image[foto]'
.
'|mime_in[foto,image/jpg,image/jpeg,image/gif,image/png,i
mage/webp]'
. '|max_size[foto,1000]'
. '|max_dims[foto,4000,4000]',
],
];
$validated = $this->validate($validationRule);
if ($validated) {
$ambil_file = $this->request->getFile('foto');
$ambil_file->move('img');
$namafile = $ambil_file->getName();
$this->pegawai->save([
'nama' => $this->request->getVar('nama'),
'jenis_kelamin' => $this->request-
>getVar('jenis_kelamin'),
'no_telp' => $this->request->getVar('no_telp'),
'email' => $this->request->getVar('email'),
'alamat' => $this->request->getVar('alamat'),
'jabatan' => $this->request->getVar('jabatan'),
'foto' => $namafile, // Simpan nama file foto
]);
echo '<script>
alert("Proses Input Data Berhasil");
window.location="' . base_url('pegawai') . '"
34
</script>';
return redirect()->to('/pegawai');
} else {
echo '<script>
alert("File Tidak Sesuai");
window.location="' . base_url('pegawai') . '"
</script>';
}
}
Sehingga tampilan keseluruhan kode pada controller pegawai sebagai
berikut;
<?php
namespace App\Controllers;
use App\Models\PegawaiModel;
35
}
$validated = $this->validate($validationRule);
if ($validated) {
$ambil_file = $this->request->getFile('foto');
$ambil_file->move('img');
$namafile = $ambil_file->getName();
$this->pegawai->save([
'nama' => $this->request->getVar('nama'),
'jenis_kelamin' => $this->request-
>getVar('jenis_kelamin'),
'no_telp' => $this->request->getVar('no_telp'),
'email' => $this->request->getVar('email'),
'alamat' => $this->request->getVar('alamat'),
'jabatan' => $this->request->getVar('jabatan'),
'foto' => $namafile, // Simpan nama file foto
]);
echo '<script>
36
alert("Proses Input Data Berhasil");
window.location="' . base_url('pegawai') . '"
</script>';
return redirect()->to('/pegawai');
} else {
echo '<script>
alert("File Tidak Sesuai");
window.location="' . base_url('pegawai') . '"
</script>';
}
}
}
<div class="container">
<div class="card">
<div class="card-header">
<h3>Data Pegawai</h3>
</div>
<div class="card-body">
37
</div>
<?php endif; ?>
38
height="100">
</td>
<td class="text-center">
<a title="Edit" href="<?=
base_url("pegawai/update/$row->id_pegawai"); ?>"
class="btn btn-sm btn-info">
<i class="fas fa-edit"></i> Edit
</a>
<a title="Delete" href="<?=
base_url("pegawai/delete/$row->id_pegawai"); ?>"
class="btn btn-sm btn-danger"
onclick="return confirm('Apakah Anda yakin
ingin menghapus data ini?')">
<i class="fas fa-trash"></i> Delete
</a>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?php else : ?>
<div class="text-center">
Tidak ada data pegawai.
</div>
<?php endif; ?>
</div>
</div>
</div>
<div class="container">
<div class="card">
39
<div class="card-header">
<h3><?= $title; ?></h3>
</div>
<div class="card-body">
<form action="<?= base_url('/pegawai/code_tambah');
?>" method="post" enctype="multipart/form-data">
<?= csrf_field(); ?>
40
<input type="text" name="email" class="form-
control" id="email" placeholder="Masukkan Email">
</div>
41
<?= $this->endSection('content'); ?>
5. Menambahkan Routes
Jangan lupa menambahkan rute (route) di app/config/Routes.php untuk
menghubungkan URL dengan controller dan metode yang tepat.
42
Untuk fitur update data kita bisa menambahkan method edit() untuk
menampilkan data pegawai yang ingin diedit, dan method update() untuk
menangani proses update pada file controller yang sudah ada. Kode yang
perlu ditambahkan yaitu sebagai berikut:
a). Fungsi edit
// Menampilkan form edit data pegawai
public function edit($id)
{
$pegawai = $this->pegawai->find($id);
if (!$pegawai) {
echo '<script>
alert("Data tidak ditemukan!");
window.location="' . base_url('pegawai') . '"
</script>';
return redirect()->to('/pegawai');
}
$data = [
'pegawai' => $pegawai,
'title' => 'Form Edit Pegawai'
];
43
if (!$pegawai) {
echo '<script>
alert("Data tidak ditemukan!");
window.location="' . base_url('pegawai') . '";
</script>';
return redirect()->to('/pegawai');
}
$ambil_file = $this->request->getFile('foto');
$namafile = $pegawai->foto;
$ambil_file->move('img');
$namafile = $ambil_file->getName();
}
44
alert("Proses Update Data Berhasil");
window.location="' . base_url('pegawai') . '";
</script>';
return redirect()->to('/pegawai');
}
45
<option value="Laki-Laki" <?= $pegawai-
>jenis_kelamin == 'Laki-Laki' ? 'selected' : ''; ?>>
Laki-Laki
</option>
<option value="Perempuan" <?= $pegawai-
>jenis_kelamin == 'Perempuan' ? 'selected' : ''; ?>>
Perempuan
</option>
</select>
</div>
<!-- Input No Telepon -->
<div class="mb-3">
<label for="no_telp" class="form-label">No
Telepon</label>
<input type="text" class="form-control" id="no_telp"
name="no_telp"
value="<?= esc($pegawai->no_telp); ?>" required>
</div>
<!-- Input Email -->
<div class="mb-3">
<label for="email" class="form-label">Email</label>
<input type="email" class="form-control" id="email"
name="email"
value="<?= esc($pegawai->email); ?>" required>
</div>
<!-- Input Alamat -->
<div class="mb-3">
<label for="alamat" class="form-
label">Alamat</label>
<textarea class="form-control" id="alamat"
name="alamat" rows="3"
required><?= esc($pegawai->alamat);
?></textarea>
</div>
<!-- Input Jabatan -->
<div class="mb-3">
46
<label for="jabatan" class="form-
label">Jabatan</label>
<input type="text" class="form-control" id="jabatan"
name="jabatan"
value="<?= esc($pegawai->jabatan); ?>" required>
</div>
<!-- Input Foto -->
<div class="mb-3">
<label for="foto" class="form-label">Foto</label>
<input type="file" name="foto" class="form-control"
id="foto">
<?php if ($pegawai->foto) : ?>
<small>Foto saat ini: <strong><?= $pegawai->foto;
?></strong></small>
<br>
<img src="/img/<?= $pegawai->foto; ?>" alt="Foto
Saat Ini" width="100" class="img-thumbnail mt-2">
<?php endif; ?>
</div>
<!-- Tombol Simpan -->
<button type="submit" class="btn btn-
primary">Simpan Perubahan</button>
<a href="<?= base_url('pegawai'); ?>" class="btn btn-
secondary">Batal</a>
</form>
</div>
</div>
</div>
<?= $this->endSection('content'); ?>
47
4. Tampilan hasil edit data pegawai
48
Jangan lupa menambahkan rute (route) di app/config/Routes.php untuk
menghubungkan URL dengan controller dan metode yang tepat
49
• File JavaScript: Tempatkan di public/assets/js.
• File Font: Tempatkan di public/assets/fonts (jika ada).
• File Gambar: Tempatkan di public/assets/images (jika ada).
• Pastikan struktur folder public/assets terlihat seperti ini:
public/assets/
├── css/
├── js/
├── fonts/
└── images/
3. Menghubungkan Template ke View
Integrasikan file CSS dan JavaScript ke dalam view CodeIgniter. Ikuti langkah
berikut:
• Buka file view utama Anda, misalnya app/Views/layout/main.php.
• Tambahkan link ke file CSS dan JS di dalam file tersebut.
Contoh:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-
scale=1.0">
<title>Dashboard</title>
<!-- Tambahkan CSS -->
<link rel="stylesheet" href="<?=
base_url('assets/css/bootstrap.min.css'); ?>">
<link rel="stylesheet" href="<?= base_url('assets/css/style.css');
?>">
</head>
<body>
<!-- Konten -->
<?= $this->renderSection('content'); ?>
<!-- Tambahkan JavaScript -->
<script src="<?= base_url('assets/js/bootstrap.bundle.min.js');
?>"></script>
<script src="<?= base_url('assets/js/main.js'); ?>"></script>
</body>
50
</html>
51
f) Mengatur Responsif dan Mobile-Friendly
Bootstrap secara otomatis membuat halaman Anda menjadi responsif. Anda
hanya perlu memastikan Anda menggunakan kelas-kelas yang disediakan oleh
Bootstrap seperti container, row, dan col- untuk mengatur layout yang
fleksibel.
g) Menyesuaikan Tampilan Login dan Dashboard
Pada tahap ini, setelah template berhasil terintegrasi dengan proyek CodeIgniter
4, langkah selanjutnya adalah menyesuaikan tampilan halaman login, registrasi,
dan dashboard agar selaras dengan desain dan pengalaman pengguna yang
diinginkan. Penyesuaian ini meliputi perubahan elemen UI, penggunaan
komponen interaktif, dan pengaturan layout agar tampilan lebih profesional dan
mudah digunakan.
1. Menyiapkan File View
File view adalah tempat di mana template HTML ditempatkan untuk masing-
masing halaman, seperti login, registrasi, dan dashboard. Sesuaikan file
berikut:
• Login: app/Views/auth/login.php
• Registrasi: app/Views/auth/register.php
• Dashboard: app/Views/dashboard.php
Contoh struktur folder:
app/
├── Views/
│ ├── auth/
│ │ ├── login.php
│ │ └── register.php
│ ├── dashboard.php
2. Menghubungkan View dengan Template
Gunakan fungsi extend() dan section() untuk mengintegrasikan halaman dengan
template utama yang sudah Anda buat, misalnya app/Views/layout/main.php.
Contoh login.php:
<?= $this->extend('layout/main'); ?>
52
<form action="<?= base_url('auth/login') ?>" method="post">
<div class="form-group">
<label for="email">Email:</label>
<input type="email" id="email" name="email" class="form-
control" required>
</div>
<div class="form-group">
<label for="password">Password:</label>
<input type="password" id="password" name="password"
class="form-control" required>
</div>
<button type="submit" class="btn btn-primary">Login</button>
</form>
</div>
<?= $this->endSection(); ?>
3. Menambahkan Komponen UI
Untuk meningkatkan interaksi pengguna, gunakan komponen UI seperti modal,
alert, dan validasi form. Anda dapat menggunakan framework CSS seperti
Bootstrap.
Contoh Alert pada Login:
<?php if (session()->getFlashdata('error')): ?>
<div class="alert alert-danger">
<?= session()->getFlashdata('error'); ?>
</div>
<?php endif; ?>
Contoh Modal pada Dashboard:
<button type="button" class="btn btn-success" data-bs-
toggle="modal" data-bs-target="#addDataModal">
Tambah Data
</button>
53
<h5 class="modal-title" id="addDataModalLabel">Tambah
Data</h5>
<button type="button" class="btn-close" data-bs-
dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<form>
<div class="mb-3">
<label for="dataField" class="form-
label">Data:</label>
<input type="text" class="form-control"
id="dataField">
</div>
<button type="submit" class="btn btn-
primary">Simpan</button>
</form>
</div>
</div>
</div>
</div>
4. Mengatur Dashboard
Halaman dashboard adalah pusat dari aplikasi. Sesuaikan dengan menampilkan
data dinamis dari database menggunakan model dan controller.
Controller:Halaman dashboard adalah pusat dari aplikasi. Sesuaikan dengan
menampilkan data dinamis dari database menggunakan model dan controller.
Controller:
public function index()
{
$dataModel = new DataModel();
$data['items'] = $dataModel->findAll();
54
<th>ID</th>
<th>Nama</th>
<th>Aksi</th>
</tr>
</thead>
<tbody>
<?php foreach ($items as $item): ?>
<tr>
<td><?= $item['id']; ?></td>
<td><?= $item['name']; ?></td>
<td>
<a href="<?= base_url('edit/'.$item['id']); ?>" class="btn
btn-warning">Edit</a>
<a href="<?= base_url('delete/'.$item['id']); ?>" class="btn
btn-danger">Delete</a>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
55
3. Kesimpulan
3.1 Ringkasan
Melalui modul ini, peserta telah diajak untuk mempelajari dan menerapkan
langkah-langkah penting dalam membangun sistem register, login, dan CRUD
menggunakan framework CodeIgniter 4. Proses ini mencakup pemahaman mendalam
mengenai berbagai komponen pengembangan web, mulai dari desain struktur aplikasi
yang baik, pengelolaan database, hingga implementasi fitur keamanan.
Tidak hanya berfokus pada aspek teknis, modul ini juga menekankan pentingnya
menerapkan prinsip user experience (UX) yang baik, seperti membangun antarmuka
yang responsif dan mudah digunakan dengan integrasi Bootstrap. Peserta juga diajarkan
cara mengelola berbagai level akses pengguna untuk memastikan aplikasi tetap aman
dan sesuai kebutuhan.
Selain itu, konsep-konsep penting seperti arsitektur MVC (Model-View-
Controller), prinsip pemrograman berorientasi objek (OOP), dan penerapan validasi
data menjadi bagian integral dari pembelajaran ini. Semua hal tersebut dirancang untuk
membantu peserta menguasai tidak hanya kemampuan teknis tetapi juga pola pikir
pengembangan aplikasi yang terorganisir dan efisien. Dengan menyelesaikan modul ini,
peserta diharapkan mampu:
• Membangun aplikasi berbasis web yang aman, efisien, dan responsif
menggunakan CodeIgniter 4.
• Mengintegrasikan komponen modern seperti template Bootstrap untuk
meningkatkan estetika dan pengalaman pengguna.
• Menerapkan prinsip keamanan aplikasi web, seperti proteksi terhadap SQL
Injection dan validasi data input pengguna.
• Mengelola proyek pengembangan web dari awal hingga implementasi dengan
struktur yang terorganisir dan sesuai standar industri.
Melalui pembelajaran ini, peserta tidak hanya memperoleh keterampilan teknis
tetapi juga wawasan mengenai pengelolaan aplikasi yang siap diimplementasikan dalam
skenario nyata. Harapannya, pengetahuan yang telah didapatkan dapat menjadi fondasi
kuat untuk melangkah lebih jauh dalam dunia pengembangan web, menciptakan aplikasi
yang memberikan nilai tambah bagi pengguna, serta terus berinovasi dalam
memanfaatkan teknologi terkini.
56