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:
-
Mengelola data produk (Kode, Nama, Harga USD, Stok).
-
Menghitung konversi harga dari USD ke Rupiah (IDR) secara real-time dengan mengonsumsi API publik menggunakan paket Composer Guzzle.
-
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
-
Jalankan server lokal Yii2 melalui terminal:
Bashphp yii serve -
Buka browser dan buka alamat Gii Generator:
http://localhost:8080/index.php?r=gii
Membuat Class Model (Produk.php) Otomatis
-
Pada menu Gii, pilih Model Generator $\rightarrow$ klik Start.
-
Isikan Table Name:
produk. -
Field Model Class Name akan otomatis terisi
Produk. -
Klik Preview, lalu klik Generate. (Berkas
models/Produk.phpberhasil dibuat!).
Membuat Controller, Search Model, dan View CRUD Lengkap
-
Kembali ke halaman utama Gii, pilih CRUD Generator $\rightarrow$ klik Start.
-
Isikan data berikut:
-
Model Class:
app\models\Produk -
Search Model Class:
app\models\ProdukSearch -
Controller Class:
app\controllers\ProdukController
-
-
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
-
CSRF Protection: Otomatis aktif pada form yang dibuat via
ActiveForm. -
SQL Injection Protection: Berkas Model Yii2 (
ActiveRecord) menggunakan Prepared Statements secara otomatis. -
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.




