Tutorial CodeIgniter 4 : Beberapa Bulan lalu ramainya sebuah topik pembahasan untuk framework codeigniter 4 di Indonesia, sebagai user CodeIgniter seperti saya tentunya penasaran untuk mencoba framework yang masih anget ini.
CodeIgniter muncul versi terbaru yaitu versi 4, cukup banyak hal yang berubah dari segi bentuk kode bagi saya seperti penambahan namespace, use dan sebagainya pada fitur yang dibawa php versi 7 , meskipun saya juga merupakan user baru dari codeigniter 4 ini dan masih perlu sama-sama belajar untuk CI 4 ini.
" Nah langsung aja kita ketopik utama "
Berikut Tutorial basic crud codeIgniter 4 semoga gak bosan ya ngikutin sampe akhir ya hehehe, cekidot :
Tutorial basic CRUD CodeIgniter 4
Hal-hal apa saja yg akan di pelajari pada tutorial basic CRUD CodeIgniter 4 ini yaitu sebagai berikut :
1. Pengenalan CodeIgniter 4
2. Cara Installasi CodeIgniter 4
3. Membuat Aplikasi CRUD Sederhana dengan CodeIgniter 4, berikut hal-hal yang dipelajari :
CodeIgniter merupakan salah satu Framework PHP untuk membangun aplikasi berbasis web, yang bersifat open source yang menggunakan metode MVC ( Model, View, Controller). Framework Codeigniter dibuat dengan tujuan yang sama dengan framework lain yaitu membantu mempermudah kan developer atau programmer dalam membangun sebuah aplikasi berbasis web, tanpa harus build dan coding dari awal.
MVC adalah teknik atau konsep yang memisahkan komponen utama menjadi 3 bagian :
Spesifikasi yang dibutuhkan CodeIgniter 4 : Menurut dokumentasi resmi CodeIgniter, CI 4 membutuhkan dan menggunakan spesifikasi PHP >= 7.2 , bila anda masih menggunakan PHP < 7.2 disarankan untuk melakukan Update.
untuk menginstall CodeIgniter 4 dapat dilakukan dengan 2 cara, yaitu dengan manual download dari web codeigniter dan instalasi dengan melalui composer.
composer -v
cd ../../xampp/htdocs
cd /opt/lampp/htdocs
composer create-project codeigniter4/appstarter belajar-ci --no-dev
cd belajar-ci
php spark serve
Pada CodeIgniter 4, mengambil konsep yang sama dengan CodeIgniter 3 yang menggunakan konsep MVC ( Model View Controller ), kita bisa lihat struktur folder pada CodeIgniter 4 sebagai berikut :
dan nah sebenernya codeigniter 4 memiliki struktur hampir sama dengan codeigniter 3 :
Nah pada step ini yang kita lakukan pertama adalah bagaimana cara controller menampilkan view pada CI 4 :
1. buatlah sebuah controller dengan nama Halo.php pada folder app/Controllers lalu isi file tersebut dengan code berikut :
<?php namespace App\Controllers; use CodeIgniter\Controller; class Halo extends Controller { public function index() { $data['title'] = 'Hallo Dunia !'; $data['msg'] = 'Selamat datang di CodeIgniter 4'; echo view('halo_view',$data); } }
2. lalu buatlah sebuah view dengan nama halo_view.php pada folder app/Views lalu kita coba isi html nya dengan kode berikut :
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title><?= $title;?></title> </head> <body> <h1><?= $msg;?></h1> </body> </html>
kemudian cek hasil kerja kita, dengan buka browser dan buka url berikut :
http://localhost:8080/halo
jika berjalan maka terlihat seperti gambar berikut :
untuk membuat koneksi database, tentu kita akan buat database terlebih dahulu, buat db dengan nama ci4_barang dan buat table barang :
Lalu membuat koneksi database dengan codeigniter, ada 2 cara :
Cara 1 dengan konfigurasi file Database.php pada folder file app/Config/Database.php
Buka file Database.php lalu edit isi kode array, 'username', 'password', dan 'database' seperti versi pendahulunya, CI 3 :
public $default = [ 'DSN' => '', 'hostname' => 'localhost', 'username' => 'root', // isi username 'password' => '', // isi password bila ada 'database' => 'ci4_barang', // ubah dbname 'DBDriver' => 'MySQLi', 'DBPrefix' => '', 'pConnect' => false, 'DBDebug' => (ENVIRONMENT !== 'production'), 'cacheOn' => false, 'cacheDir' => '', 'charset' => 'utf8', 'DBCollat' => 'utf8_general_ci', 'swapPre' => '', 'encrypt' => false, 'compress' => false, 'strictOn' => false, 'failover' => [], 'port' => 3306, ];
Cara 2 Dengan env yg terdapat pada folder root :
cara ini cara ke 2 selain cara yang diatas, untuk mengkoneksikan database ke codeigniter 4 :
temukan kode berikut :
# database.default.hostname = localhost # database.default.database = ci4 # database.default.username = root # database.default.password = root # database.default.DBDriver = MySQLi
lalu ubah dengan menghilangkan tanda # atau comment, dan isi seperti biasa username, password dan dbname nya :
database.default.hostname = localhost database.default.database = ci4_barang database.default.username = root database.default.password = database.default.DBDriver = MySQLi
note : pada tutorial ini saya menggunakan cara ke 1 untuk membuat koneksi database .
pada step ke 3 lakukan isi data table barang anda yang tadi anda buat dengan menginsert table barang nya dengan mengeksekusi query tersebut :
INSERT INTO `barang` (`id_barang`, `nama_barang`, `qty`, `harga_beli`, `harga_jual`) VALUES (NULL, 'Bola Voli', '12', '80000', '120000');
atau isinya seperti ini pada phpmyadmin :
setelah table barang ada data nya,lalu anda ikuti langkah berikut :
1. Buat sebuah file model Barang_model.php pada folder app/Models, kemudian ketikan kode berikut :
<?php namespace App\Models; use CodeIgniter\Model; class Barang_model extends Model { protected $table = 'barang'; public function getBarang($id = false) { if($id === false){ return $this->findAll(); }else{ return $this->getWhere(['id_barang' => $id]); } } }
model berikut mempunyai 1 fungsi yaitu :
pada kode $table = 'barang'; menunjukan bahwa model ini menggunakan table barang, pada database.
2. Buat sebuah Controller yaitu Barang.php pada folder app/Controllers kemudian ketik kode berikut :
<?php namespace App\Controllers; use CodeIgniter\Controller; use App\Models\Barang_model; class Barang extends Controller { public function index() { $model = new Barang_model; $data['title'] = 'Data Barang'; $data['getBarang'] = $model->getBarang(); echo view('header_view', $data); echo view('barang_view', $data); echo view('footer_view', $data); } }
pada controller kita menggunakan use App\Models\Barang_model; untuk memanggil class model pada file model yg kita buat sebelumnya
pada function index() ada beberapa isi sebagai berikut :
$model = new Barang_model;
kode diatas untuk memanggil semua function pada class model Barang_model.php
$data['title'] = 'Data Barang';
kode diatas untuk membuat title dinamis pada tampilan websitenya.
$data['getBarang'] = $model->getBarang();
Kode tersebut berfungsi untuk memanggil function getBarang() yg terdapat pada model Barang_model.php
selanjutnya kode view()
echo view('header_view', $data); echo view('barang_view', $data); echo view('footer_view', $data);
nah pada fungsi view di controller kita memakai 3 buah view yaitu header_view, barang_view, dan footer_view :
3. Lalu terakhir buat lah sebuah file view header_view.php, barang_view.php, dan footer_view.php , nah pada tampilannya kita menggunakan bootstrap 4 sebagai tampilan utamanya agar terlihat lebih rapih dan bagus :
disini kita tidak download file Bootstrapnya melainkan via online CDN jadi siapkan internet untuk mengikuti tutorial nya
berikut adalah kode header_view.php :
<!doctype html> <html lang="en"> <head> <title><?= $title;?></title> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <!-- Bootstrap CSS --> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous"> </head> <body> <nav class="navbar navbar-expand-sm navbar-dark bg-info"> <div class="container"> <a class="navbar-brand" href="<?= base_url();?>">Data Barang Toko Codekop</a> <button class="navbar-toggler d-lg-none" type="button" data-toggle="collapse" data-target="#collapsibleNavId" aria-controls="collapsibleNavId" aria-expanded="false" aria-label="Toggle navigation"></button> </div> </nav>
berikut untuk kode footer_view.php :
<!-- Optional JavaScript --> <!-- jQuery first, then Popper.js, then Bootstrap JS --> <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script> </body> </html>
dan untuk barang_view.php berfungsi untuk menampikan data barang berikut kodenya :
<div class="container pt-5"> <a href="<?= base_url('barang/tambah');?>" class="btn btn-success mb-2">Tambah Data</a> <div class="card"> <div class="card-header bg-info text-white"> <h4 class="card-title">Data Barang</h4> </div> <div class="card-body"> <div class="table-responsive"> <table class="table table-bordered table-striped"> <thead> <tr> <th>No.</th> <th>Nama Barang</th> <th>Qty</th> <th>Harga Beli</th> <th>Harga Jual</th> <th>Aksi</th> </tr> </thead> <tbody> <?php $no=1; foreach($getBarang as $isi){?> <tr> <td><?= $no;?></td> <td><?= $isi['nama_barang'];?></td> <td><?= $isi['qty'];?></td> <td>Rp<?= number_format($isi['harga_beli']);?>,-</td> <td>Rp<?= number_format($isi['harga_jual']);?>,-</td> <td> <a href="<?= base_url('barang/edit/'.$isi['id_barang']);?>" class="btn btn-success"> Edit</a> <a href="<?= base_url('barang/hapus/'.$isi['id_barang']);?>" onclick="javascript:return confirm('Apakah ingin menghapus data barang ?')" class="btn btn-danger"> Hapus</a> </td> </tr> <?php $no++;}?> </tbody> </table> </div> </div> </div> </div>
Kemudian Coba testing project kita ke url :
http://localhost:8080/barang
hasilnya seperti gambar berikut :
1. step pertama masih kita gunakan file Controller Barang.php, pada folder app/Controllers, pada step ini kita membuat fungsi baru untuk menampilkan tambah data barang, berikut kode Barang.php ketika ditambahkan fungsi baru yaitu function tambah() :
<?php namespace App\Controllers; use CodeIgniter\Controller; use App\Models\Barang_model; class Barang extends Controller { public function index() { $model = new Barang_model; $data['title'] = 'Data Barang'; $data['getBarang'] = $model->getBarang(); echo view('header_view', $data); echo view('barang_view', $data); echo view('footer_view', $data); } public function tambah() { $data['title'] = 'Tambah Data Barang'; echo view('header_view', $data); echo view('tambah_view', $data); echo view('footer_view', $data); } }
2. step 2 lalu sekarang buat file tambah_view pada folder app/Views dengan isi kode berikut :
<div class="container p-5"> <a href="<?= base_url('barang');?>" class="btn btn-secondary mb-2">Kembali</a> <div class="card"> <div class="card-header bg-info text-white"> <h4 class="card-title">Tambah Data Barang</h4> </div> <div class="card-body"> <form method="post" action="<?= base_url('barang/add');?>"> <div class="form-group"> <label for="">Nama Barang</label> <input type="text" name="nama" class="form-control" required> </div> <div class="form-group"> <label for="">Qty</label> <input type="number" name="qty" class="form-control" required> </div> <div class="form-group"> <label for="">Harga Beli</label> <input type="number" name="beli" class="form-control" required> </div> <div class="form-group"> <label for="">Harga Jual</label> <input type="number" name="jual" class="form-control" required> </div> <button class="btn btn-success">Tambah Data</button> </form> </div> </div> </div>
3. step 3 lalu membuat function add() untuk insert data kedalam database, dengan cara kita ke file Controller Barang.php :
<?php namespace App\Controllers; use CodeIgniter\Controller; use App\Models\Barang_model; class Barang extends Controller { public function index() { $model = new Barang_model; $data['title'] = 'Data Barang'; $data['getBarang'] = $model->getBarang(); echo view('header_view', $data); echo view('barang_view', $data); echo view('footer_view', $data); } public function tambah() { $data['title'] = 'Tambah Data Barang'; echo view('header_view', $data); echo view('tambah_view', $data); echo view('footer_view', $data); } public function add() { $model = new Barang_model; $data = array( 'nama_barang' => $this->request->getPost('nama'), 'qty' => $this->request->getPost('qty'), 'harga_beli' => $this->request->getPost('beli'), 'harga_jual' => $this->request->getPost('jual') ); $model->saveBarang($data); echo '<script> alert("Sukses Tambah Data Barang"); window.location="'.base_url('barang').'" </script>'; } }
4. lalu step 4 buat function saveBarang() untuk fungsi insert data ke db pada Model Barang_model.php , di folder app/Models :
<?php namespace App\Models; use CodeIgniter\Model; class Barang_model extends Model { protected $table = 'barang'; public function getBarang($id = false) { if($id === false){ return $this->findAll(); }else{ return $this->getWhere(['id_barang' => $id]); } } public function saveBarang($data) { $builder = $this->db->table($this->table); return $builder->insert($data); } }
Setelah selesai, kita coba testing untuk tambah data barangnya yang memiliki tampilan berikut :
Lalu kita ujicoba insert data barangnya :
Jika Berhasil data akan bertambah :
pada step ke 5 ini kita akan belajar membuat update / edit tabel barang pada CodeIgniter 4
1. step pertama tetap kita gunakan file Controller Barang.php, pada folder app/Controllers, pada step ini kita membuat fungsi baru untuk menampilkan edit data barang, berikut kode Barang.php ketika ditambahkan fungsi baru yaitu function edit() :
<?php namespace App\Controllers; use CodeIgniter\Controller; use App\Models\Barang_model; class Barang extends Controller { public function index() { $model = new Barang_model; $data['title'] = 'Data Barang'; $data['getBarang'] = $model->getBarang(); echo view('header_view', $data); echo view('barang_view', $data); echo view('footer_view', $data); } public function tambah() { $data['title'] = 'Tambah Data Barang'; echo view('header_view', $data); echo view('tambah_view', $data); echo view('footer_view', $data); } public function add() { $model = new Barang_model; $data = array( 'nama_barang' => $this->request->getPost('nama'), 'qty' => $this->request->getPost('qty'), 'harga_beli' => $this->request->getPost('beli'), 'harga_jual' => $this->request->getPost('jual') ); $model->saveBarang($data); echo '<script> alert("Sukses Tambah Data Barang"); window.location="'.base_url('barang').'" </script>'; } public function edit($id) { $model = new Barang_model; $getBarang = $model->getBarang($id)->getRow(); if(isset($getBarang)) { $data['barang'] = $getBarang; $data['title'] = 'Edit '.$getBarang->nama_barang; echo view('header_view', $data); echo view('edit_view', $data); echo view('footer_view', $data); }else{ echo '<script> alert("ID barang '.$id.' Tidak ditemukan"); window.location="'.base_url('barang').'" </script>'; } } }
pada function edit($id) berfungsi untuk menampilkan data pada form edit barang nanti.
note : logika edit data ini saya gunakan untuk mencegah orang yang memodifikasi tangkapan id pada url.
2. step kedua lalu kita akan buat view edit_view.php, untuk tampilan editnya pada folder app/Views dan isi kode berikut :
<div class="container p-5"> <a href="<?= base_url('barang');?>" class="btn btn-secondary mb-2">Kembali</a> <div class="card"> <div class="card-header bg-info text-white"> <h4 class="card-title">Edit Barang : <?= $barang->nama_barang;?></h4> </div> <div class="card-body"> <form method="post" action="<?= base_url('barang/update');?>"> <div class="form-group"> <label for="">Nama Barang</label> <input type="text" value="<?= $barang->nama_barang;?>" name="nama" required class="form-control"> </div> <div class="form-group"> <label for="">Qty</label> <input type="number" value="<?= $barang->qty;?>" name="qty" required class="form-control"> </div> <div class="form-group"> <label for="">Harga Beli</label> <input type="number" value="<?= $barang->harga_beli;?>" name="beli" required class="form-control"> </div> <div class="form-group"> <label for="">Harga Jual</label> <input type="number" value="<?= $barang->harga_jual;?>" name="jual" required class="form-control"> </div> <input type="hidden" value="<?= $barang->id_barang;?>" name="id_barang"> <button class="btn btn-success">Edit Data</button> </form> </div> </div> </div>
3. step 3 lalu membuat function update() untuk update data kedalam database, dengan cara kita ke file Controller Barang.php :
<?php namespace App\Controllers; use CodeIgniter\Controller; use App\Models\Barang_model; class Barang extends Controller { public function index() { $model = new Barang_model; $data['title'] = 'Data Barang'; $data['getBarang'] = $model->getBarang(); echo view('header_view', $data); echo view('barang_view', $data); echo view('footer_view', $data); } public function tambah() { $data['title'] = 'Tambah Data Barang'; echo view('header_view', $data); echo view('tambah_view', $data); echo view('footer_view', $data); } public function add() { $model = new Barang_model; $data = array( 'nama_barang' => $this->request->getPost('nama'), 'qty' => $this->request->getPost('qty'), 'harga_beli' => $this->request->getPost('beli'), 'harga_jual' => $this->request->getPost('jual') ); $model->saveBarang($data); echo '<script> alert("Sukses Tambah Data Barang"); window.location="'.base_url('barang').'" </script>'; } public function edit($id) { $model = new Barang_model; $getBarang = $model->getBarang($id)->getRow(); if(isset($getBarang)) { $data['barang'] = $getBarang; $data['title'] = 'Edit '.$getBarang->nama_barang; echo view('header_view', $data); echo view('edit_view', $data); echo view('footer_view', $data); }else{ echo '<script> alert("ID barang '.$id.' Tidak ditemukan"); window.location="'.base_url('barang').'" </script>'; } } public function update() { $model = new Barang_model; $id = $this->request->getPost('id_barang'); $data = array( 'nama_barang' => $this->request->getPost('nama'), 'qty' => $this->request->getPost('qty'), 'harga_beli' => $this->request->getPost('beli'), 'harga_jual' => $this->request->getPost('jual') ); $model->editBarang($data,$id); echo '<script> alert("Sukses Edit Data Barang"); window.location="'.base_url('barang').'" </script>'; } }
4. lalu step 4 buat function editBarang() untuk fungsi update data ke db pada Model Barang_model.php , di folder app/Models :
<?php namespace App\Models; use CodeIgniter\Model; class Barang_model extends Model { protected $table = 'barang'; public function getBarang($id = false) { if($id === false){ return $this->findAll(); }else{ return $this->getWhere(['id_barang' => $id]); } } public function saveBarang($data) { $builder = $this->db->table($this->table); return $builder->insert($data); } public function editBarang($data,$id) { $builder = $this->db->table($this->table); $builder->where('id_barang', $id); return $builder->update($data); } }
Setelah selesai, kita coba testing edit data barangnya yang memiliki tampilan berikut dengan edit nama barang Bola Voli dan ganti dengan Bola Kaki :
lalu jika berhasil diupdate, akan berganti nama barangnya :
1. step pertama tetap kita gunakan file Controller Barang.php, pada folder app/Controllers, pada step ini kita membuat fungsi baru untuk menghapus barang pada db, berikut kode Barang.php ketika ditambahkan fungsi baru yaitu function hapus() :
<?php namespace App\Controllers; use CodeIgniter\Controller; use App\Models\Barang_model; class Barang extends Controller { public function index() { $model = new Barang_model; $data['title'] = 'Data Barang'; $data['getBarang'] = $model->getBarang(); echo view('header_view', $data); echo view('barang_view', $data); echo view('footer_view', $data); } public function tambah() { $data['title'] = 'Tambah Data Barang'; echo view('header_view', $data); echo view('tambah_view', $data); echo view('footer_view', $data); } public function add() { $model = new Barang_model; $data = array( 'nama_barang' => $this->request->getPost('nama'), 'qty' => $this->request->getPost('qty'), 'harga_beli' => $this->request->getPost('beli'), 'harga_jual' => $this->request->getPost('jual') ); $model->saveBarang($data); echo '<script> alert("Sukses Tambah Data Barang"); window.location="'.base_url('barang').'" </script>'; } public function edit($id) { $model = new Barang_model; $getBarang = $model->getBarang($id)->getRow(); if(isset($getBarang)) { $data['barang'] = $getBarang; $data['title'] = 'Edit '.$getBarang->nama_barang; echo view('header_view', $data); echo view('edit_view', $data); echo view('footer_view', $data); }else{ echo '<script> alert("ID barang '.$id.' Tidak ditemukan"); window.location="'.base_url('barang').'" </script>'; } } public function update() { $model = new Barang_model; $id = $this->request->getPost('id_barang'); $data = array( 'nama_barang' => $this->request->getPost('nama'), 'qty' => $this->request->getPost('qty'), 'harga_beli' => $this->request->getPost('beli'), 'harga_jual' => $this->request->getPost('jual') ); $model->editBarang($data,$id); echo '<script> alert("Sukses Edit Data Barang"); window.location="'.base_url('barang').'" </script>'; } public function hapus($id) { $model = new Barang_model; $getBarang = $model->getBarang($id)->getRow(); if(isset($getBarang)) { $model->hapusBarang($id); echo '<script> alert("Hapus Data Barang Sukses"); window.location="'.base_url('barang').'" </script>'; }else{ echo '<script> alert("Hapus Gagal !, ID barang '.$id.' Tidak ditemukan"); window.location="'.base_url('barang').'" </script>'; } } }
pada function hapus($id) berfungsi untuk hapus data pada tabel barang.
note : logika hapus ini sama dengan edit data, ini saya gunakan untuk mencegah orang yang memodifikasi tangkapan id pada url.
2. lalu step 2 buat function hapusBarang() untuk fungsi hapus data tabel pada Model Barang_model.php , di folder app/Models :
<?php namespace App\Models; use CodeIgniter\Model; class Barang_model extends Model { protected $table = 'barang'; public function getBarang($id = false) { if($id === false){ return $this->findAll(); }else{ return $this->getWhere(['id_barang' => $id]); } } public function saveBarang($data) { $builder = $this->db->table($this->table); return $builder->insert($data); } public function editBarang($data,$id) { $builder = $this->db->table($this->table); $builder->where('id_barang', $id); return $builder->update($data); } public function hapusBarang($id) { $builder = $this->db->table($this->table); return $builder->delete(['id_barang' => $id]); } }
Horee, selesai, nah sekarang langkah terakhir kita coba testing hapus data nya yang kita hapus disini nama barang Bola Basket :
Lalu jika sukses, nama barang Bola Basket, akan hilang :
Note :
Untuk mengganti halaman root utama atau default url dari http://localhost:8080/barang, menjadi http://localhost:8080 anda dapat mengubahnya dengan cara mengganti router controller default nya pada folder app/Config/Routes.php lalu cari kode berikut :
$routes->get('/', 'Home::index');
dan ubah menjadi :
$routes->get('/', 'Barang::index');
Lalu buka browser pada url :
http://localhost:8080/
Selesai ..
Akhir kata :
Pembahasan ini untuk tutorial lengkap crud CI4 untuk pemula, dimulai dari pengenalan apa itu CodeIgniter 4, sampai membuat Aplikasi Crud sederhana dengan menggunakan Bootstrap, dan mengkoneksikan dengan database.
Terima kasih sudah berkunjung, semoga tutorial ini bermanfaat, mohon maaf bila ada salah salah kata, pada pembuatan tutorial kali ini. salam koding.
Source Code : https://github.com/fauzan1892/crud-basic-ci4
* Temukan berbagai postingan dan produk yang kamu cari