Panduan Praktis: Membuat Proyek Web Khusus Menggunakan Yii2 & Composer

📅 7 Agustus 2026 ☕ 5 min read
Panduan Praktis: Membuat Proyek Web Khusus Menggunakan Yii2 & Composer

Panduan Praktis: Membuat Proyek Web Khusus Menggunakan Yii2 & Composer

Setelah mempelajari konsep dasar framework, arsitektur MVC, hingga komponen Composer di artikel-artikel sebelumnya, saatnya kita mempraktikkan pengetahuan tersebut dalam proyek nyata.

Pada panduan praktis ini, kita akan membangun sebuah proyek khusus sederhana yaitu Sistem Manajemen Inventaris Produk menggunakan Yii2 (Basic Project Template) dan mengintegrasikannya dengan paket Composer eksternal (guzzlehttp/guzzle untuk sinkronisasi mata uang via API).

Yii2 terkenal dengan performanya yang sangat cepat, keamanan bawaan yang kokoh, serta alat pembuat kode otomatis (Gii Generator) yang akan memangkas waktu pembuatan aplikasi secara signifikan!

1. Pendahuluan & Gambaran Proyek

Mengapa Memilih Yii2 untuk Proyek Khusus?

Yii2 adalah framework PHP berbasis komponen yang sangat efisien untuk membangun aplikasi web intensif data. Keunggulan utamanya meliputi:

  • Performa Ekstrem: Menggunakan teknik lazy loading yang cepat.

  • Keamanan Default: Proteksi otomatis terhadap CSRF, XSS, dan SQL Injection.

  • Gii Generator: Alat interaktif visual untuk menghasilkan kode CRUD dalam hitungan detik.

Studi Kasus: Sistem Manajemen Inventaris Produk

Aplikasi yang akan kita bangun memiliki kemampuan:

  1. Mengelola data produk (Kode, Nama, Harga USD, Stok).

  2. Menghitung konversi harga dari USD ke Rupiah (IDR) secara real-time dengan mengonsumsi API publik menggunakan paket Composer Guzzle.

  3. Menyediakan antarmuka tabel interaktif (GridView) untuk pencarian dan pengurutan data.

2. Persiapan & Inisialisasi Proyek Yii2

Pastikan kamu sudah menginstal PHP (v8.0+) dan Composer di komputermu.

Langkah 1: Mengunduh Template Proyek Yii2 via Composer

Buka terminal/command prompt, lalu jalankan perintah berikut untuk mengunduh template dasar Yii2:

Bash

 

composer create-project --prefer-dist yiisoft/yii2-app-basic inventaris-yii2

Masuk ke direktori proyek:

Bash

 

cd inventaris-yii2

Langkah 2: Memasukkan Paket Dependensi Tambahan via Composer

Kita akan menambahkan paket Guzzle untuk menangani panggilan HTTP ke API kurs mata uang:

Bash

 

composer require guzzlehttp/guzzle 
atau
composer require guzzlehttp/guzzle:^7.9

3. Konfigurasi Database & Struktur Tabel

Menhubungkan Yii2 dengan MySQL

Buka berkas konfigurasi database di config/db.php dan sesuaikan kredensial MySQL milikmu:

PHP

 

 'yii\db\Connection',
    'dsn' => 'mysql:host=127.0.0.1;dbname=db_inventaris',
    'username' => 'root',
    'password' => '',
    'charset' => 'utf8',
];

Membuat Skema Tabel produk

Eksekusi kueri SQL berikut di database MySQL (db_inventaris):

SQL

 

CREATE TABLE `produk` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `kode_produk` VARCHAR(20) NOT NULL UNIQUE,
  `nama_produk` VARCHAR(100) NOT NULL,
  `harga_usd` DECIMAL(10,2) NOT NULL,
  `stok` INT NOT NULL DEFAULT 0,
  `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

4. Generasi Kode Otomatis Menggunakan Yii2 Gii Generator

Menjalankan Server Lokal & Mengakses Gii

  1. Jalankan server lokal Yii2 melalui terminal:

    Bash

     

    php yii serve
    
  2. Buka browser dan buka alamat Gii Generator: http://localhost:8080/index.php?r=gii

Membuat Class Model (Produk.php) Otomatis

  1. Pada menu Gii, pilih Model Generator $\rightarrow$ klik Start.

  2. Isikan Table Name: produk.

  3. Field Model Class Name akan otomatis terisi Produk.

  4. Klik Preview, lalu klik Generate. (Berkas models/Produk.php berhasil dibuat!).

Membuat Controller, Search Model, dan View CRUD Lengkap

  1. Kembali ke halaman utama Gii, pilih CRUD Generator $\rightarrow$ klik Start.

  2. Isikan data berikut:

    • Model Class: app\models\Produk

    • Search Model Class: app\models\ProdukSearch

    • Controller Class: app\controllers\ProdukController

  3. Klik Preview, lalu klik Generate.

Hanya dalam hitungan detik, Yii2 telah membangungkan seluruh alur CRUD lengkap beserta form dan tabel interaktif!

5. Kustomisasi Logika Bisnis & Integrasi API External

Sekarang mari kita kustomisasi kode buatan Gii agar bisa mengonsumsi API kurs mata uang via Guzzle.

Langkah A: Menambahkan Method Konsumsi API Kurs USD-to-IDR pada Model

Buka berkas models/Produk.php dan tambahkan fungsi penarik API serta konversi harga:

PHP

 

 20],
            [['nama_produk'], 'string', 'max' => 100],
            [['kode_produk'], 'unique'],
        ];
    }

    // Mengambil Kurs USD ke IDR menggunakan Guzzle Client
    public static function getKursUsdToIdr(): float
    {
        // Gunakan cache Yii2 agar tidak berulang kali memanggil API pada setiap refresh
        return Yii::$app->cache->getOrSet('kurs_usd_idr', function () {
            try {
                $client = new Client();
                $response = $client->request('GET', 'https://open.er-api.com/v6/latest/USD');
                
                if ($response->getStatusCode() === 200) {
                    $data = json_decode($response->getBody(), true);
                    return (float) ($data['rates']['IDR'] ?? 15500);
                }
            } catch (\Exception $e) {
                return 15500.0; // Fallback jika API gagal
            }
            return 15500.0;
        }, 3600); // Cache berlaku selama 1 jam
    }

    // Menghitung harga dalam Rupiah
    public function getHargaRupiah(): float
    {
        return $this->harga_usd * self::getKursUsdToIdr();
    }
}

Langkah B: Menyesuaikan Tampilan GridView & Mengamankan Input pada View

Buka views/produk/index.php untuk memperbarui tabel data:

PHP

 

title = 'Manajemen Inventaris Produk';
$this->params['breadcrumbs'][] = $this->title;

$kursSaatIni = Produk::getKursUsdToIdr();
?>

title) ?>

Info Kurs Real-Time (Guzzle API): 1 USD = Rp

'btn btn-success']) ?>

$dataProvider, 'filterModel' => $searchModel, 'columns' => [ ['class' => 'yii\grid\SerialColumn'], 'kode_produk', 'nama_produk', [ 'attribute' => 'harga_usd', 'value' => function ($model) { return '$ ' . number_format($model->harga_usd, 2); } ], [ 'label' => 'Estimasi (IDR)', 'value' => function ($model) { return 'Rp ' . number_format($model->getHargaRupiah(), 0, ',', '.'); } ], 'stok', ['class' => 'yii\grid\ActionColumn'], ], ]); ?>

6. Pengujian Keamanan & Uji Coba Aplikasi

Memeriksa Fitur Keamanan Bawaan Yii2

  1. CSRF Protection: Otomatis aktif pada form yang dibuat via ActiveForm.

  2. SQL Injection Protection: Berkas Model Yii2 (ActiveRecord) menggunakan Prepared Statements secara otomatis.

  3. XSS Protection: Penggunaan Html::encode() memastikan entitas HTML dieksekusi secara aman.

Pengujian di Browser

Akses URL http://localhost:8080/index.php?r=produk di browser:

  • Cobalah menambah produk baru melalui tombol Tambah Produk Baru.

  • Perhatikan kolom Estimasi (IDR) yang secara otomatis mengonversi harga USD berdasarkan nilai kurs dari API Guzzle.

  • Uji fitur pencarian dan sorting pada tabel GridView.

7. Kesimpulan & Pengembangan Selanjutnya

Membuat proyek khusus dengan Yii2 dan Composer memberikan efisiensi luar biasa. Kombinasi Gii Generator untuk memangkas pekerjaan rutin dan Composer untuk integrasi dependensi modern seperti Guzzle memungkinkan kita membangun aplikasi berkualitas tinggi dalam waktu singkat.


+