CRUD Produk di CodeIgniter 4 tanpa Template Layout (Part 3a)

Belajar membuat Model, Controller, dan View di CodeIgniter 4 untuk CRUD Produk secara sederhana dan langsung tanpa template layout.

Pendahuluan

Pada tutorial ini, kita akan belajar bagaimana membuat CRUD yang ada di Codeigniter 4 menggunakan konsep Model, Controller, dan View (MVC) secara langsung, tanpa template layout. Langkah-langkah yang disajikan akan membantu kamu memahami bagaimana mengelola data produk dalam aplikasi secara efektif. Fitur ini penting karena kasir/admin perlu mengelola daftar barang yang akan dijual.


Struktur Tabel Produk

Sudah dibuat pada Part 2, dengan kolom penting:

  • id (PK)
  • kode_produk
  • nama_produk
  • harga
  • stok

Langkah Membuat CRUD Produk di CodeIgniter 4

Membuat Model

Langkah pertama adalah membuat model untuk produk. Model ini berfungsi sebagai representasi tabel di database dan akan menangani operasi CRUD.

Buat file baru di:
app/Models/ProdukModel.php

Isi kodenya seperti berikut:

<?php

namespace App\Models;

use CodeIgniter\Model;

class ProdukModel extends Model
{
    protected $table = 'produk';
    protected $primaryKey = 'id';
    protected $allowedFields = ['kode_produk', 'nama_produk', 'harga', 'stok'];
}

Jangan lupa untuk membuat tabel produk di database:

CREATE TABLE produk (
    id INT AUTO_INCREMENT PRIMARY KEY,
    kode_produk VARCHAR(50) UNIQUE NOT NULL,
    nama_produk VARCHAR(100) NOT NULL,
    harga DECIMAL(10, 2) NOT NULL,
    stok INT NOT NULL DEFAULT 0,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

Membuat Controller

Sekarang, kita buat controller untuk menangani request CRUD.
Buat file baru di:
app/Controllers/Produk.php

Isi kodenya seperti ini:

<?php

namespace App\Controllers;

use App\Models\ProdukModel;
use CodeIgniter\Controller;

class Produk extends Controller
{
    protected $produkModel;

    public function __construct()
    {
        $this->produkModel = new ProdukModel();
        helper(['form']);
    }

    public function index()
    {
        $data['produk'] = $this->produkModel->findAll();
        return view('produk/index', $data);
    }

    public function create()
    {
        return view('produk/create');
    }

    public function store()
    {
        $this->produkModel->save([
            'kode_produk' => $this->request->getPost('kode_produk'),
            'nama_produk' => $this->request->getPost('nama_produk'),
            'harga'       => $this->request->getPost('harga'),
            'stok'        => $this->request->getPost('stok'),
        ]);
        return redirect()->to('/produk');
    }

    public function edit($id)
    {
        $data['produk'] = $this->produkModel->find($id);
        return view('produk/edit', $data);
    }

    public function update($id)
    {
        $this->produkModel->update($id, [
            'kode_produk' => $this->request->getPost('kode_produk'),
            'nama_produk' => $this->request->getPost('nama_produk'),
            'harga'       => $this->request->getPost('harga'),
            'stok'        => $this->request->getPost('stok'),
        ]);
        return redirect()->to('/produk');
    }

    public function delete($id)
    {
        $this->produkModel->delete($id);
        return redirect()->to('/produk');
    }
}

Membuat View

Selanjutnya, buat view untuk menampilkan data.

  • Buat folder: app/Views/produk/
  • Di dalamnya, buat dua file: index.php dan create.php

📄 index.php

<h2>Daftar Produk</h2>
<a href="/produk/create">Tambah Produk</a>
<table border="1">
    <tr>
        <th>Kode</th><th>Nama</th><th>Harga</th><th>Stok</th><th>Aksi</th>
    </tr>
    <?php foreach ($produk as $p): ?>
    <tr>
        <td><?= $p['kode_produk']; ?></td>
        <td><?= $p['nama_produk']; ?></td>
        <td><?= number_format($p['harga']); ?></td>
        <td><?= $p['stok']; ?></td>
        <td>
            <a href="/produk/edit/<?= $p['id']; ?>">Edit</a> | 
            <a href="/produk/delete/<?= $p['id']; ?>" onclick="return confirm('Hapus produk ini?')">Hapus</a>
        </td>
    </tr>
    <?php endforeach; ?>
</table>

📋 create.php

<h2>Tambah Produk</h2>
<form method="post" action="/produk/store">
    <label>Kode</label><br>
    <input type="text" name="kode_produk"><br>
    <label>Nama</label><br>
    <input type="text" name="nama_produk"><br>
    <label>Harga</label><br>
    <input type="number" name="harga"><br>
    <label>Stok</label><br>
    <input type="number" name="stok"><br>
    <button type="submit">Simpan</button>
</form>

📥 edit.php

<h2>Edit Produk</h2>
<form method="post" action="/produk/update/<?= $produk['id']; ?>">
    <label>Kode</label><br>
    <input type="text" name="kode_produk" value="<?= $produk['kode_produk']; ?>"><br>
    <label>Nama</label><br>
    <input type="text" name="nama_produk" value="<?= $produk['nama_produk']; ?>"><br>
    <label>Harga</label><br>
    <input type="number" name="harga" value="<?= $produk['harga']; ?>"><br>
    <label>Stok</label><br>
    <input type="number" name="stok" value="<?= $produk['stok']; ?>"><br>
    <button type="submit">Update</button>
</form>

Routing

Tambahkan route di file app/Config/Routes.php:

$routes->get('/produk', 'Produk::index');
$routes->get('/produk/create', 'Produk::create');
$routes->post('/produk/store', 'Produk::store');
$routes->get('/produk/edit/(:num)', 'Produk::edit/$1');
$routes->post('/produk/update/(:num)', 'Produk::update/$1');
$routes->get('/produk/delete/(:num)', 'Produk::delete/$1');

Kesimpulan

Sekarang, kamu sudah berhasil membuat CRUD Produk di CodeIgniter 4. Langkah-langkah mulai dari pembuatan Model, Controller, hingga View sudah dijelaskan secara detail. Selanjutnya, kamu bisa mengembangkan fitur-fitur tambahan seperti validasi form dan pencarian data produk.

✅ Hasil Akhir

Dengan fitur ini:

  • Admin dapat menambahkan produk baru ke sistem.
  • Melihat semua daftar produk.
  • Melakukan perubahan atau penghapusan data produk.
  • Data produk akan terhubung langsung ke sistem transaksi (Part 4).
  • Download Source code

🔗 Outbound Links

Share

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *