Menginstall Yii lewat Composer — baik template basic Yii2 (yii2-app-basic) maupun app Yii3 (yiisoft/app) — membedah struktur folder yang dihasilkan, memahami entry point dan konfigurasi aplikasi, lalu menjalankan hello world pertama dengan server bawaan PHP.

Di episode 2 kita sudah membedah arsitektur Yii secara konseptual. Sekarang saatnya tangan kita kotor: menginstall Yii dan membuat project pertama. Ini adalah gerbang menuju seluruh series — setiap episode berikutnya akan menulis kode di dalam project yang kalian buat sekarang.
Di episode ini kita melakukan dua hal. Pertama, membuat project Yii2 basic template sebagai target praktik utama kita, memeriksa struktur foldernya, dan menjalankan hello world. Kedua, melihat bagaimana project Yii3 dibuat — karena konsepnya berbeda dan akan kita dalami di episode 23.
Composer menyediakan template resmi yiisoft/yii2-app-basic — template minimal untuk aplikasi web satu halaman-ke-halaman dengan autentikasi dasar, Gii, dan struktur MVC standar.
composer create-project --prefer-dist yiisoft/yii2-app-basic learn-yii-basic
cd learn-yii-basic
php yii migrate --interactive=0composer create-project mengunduh template sekaligus menjalankan composer install. Lalu php yii migrate membuat tabel bawaan (user, migration history) di database SQLite yang sudah dikonfigurasi template. Jika kalian memakai MySQL/PostgreSQL, sesuaikan dulu components.db di config/db.php.
Template basic menghasilkan struktur yang ringkas namun menegakkan MVC:
learn-yii-basic/
├── commands/ # console commands (php yii ...)
├── config/ # konfigurasi: web.php, console.php, db.php, params.php
├── controllers/ # SiteController, ...
├── models/ # User, LoginForm, SignupForm, ...
├── views/ # tampilan + layouts/main.php
├── web/ # public root: index.php, assets, uploads
├── widgets/ # widget khusus aplikasi
├── runtime/ # file temporer, cache, logs
├── tests/ # template Codeception (episode 16)
├── vendor/ # dependensi Composer (termasuk framework inti)
├── composer.json
└── yii # console entry pointPerhatikan pembedanya: web/ adalah satu-satunya folder yang harus diekspos ke web server — semua folder lain tidak boleh dapat diakses publik (episode 22 membahas hardening ini). runtime/ adalah tempat file temporer: log, cache, dan file yang dihasilkan aplikasi. vendor/ berisi seluruh dependensi, termasuk framework Yii itu sendiri.
Untuk pengembangan, template basic sudah menyertakan server PHP built-in:
php yii serve --port=8080Buka http://localhost:8080 — kalian akan melihat halaman selamat datang Yii. URL http://localhost:8080/index.php?r=site/index dipetakan ke SiteController::actionIndex(). Inilah bagian menyenangkan: setiap URL di Yii diterjemahkan oleh routing — topik yang kita bedah penuh di episode 4.
File config/web.php adalah tempat aplikasi dikonfigurasi — id aplikasi, komponen, params, dan module:
<?php
$params = require __DIR__ . '/params.php';
$config = [
'id' => 'learn-yii-basic',
'name' => 'Belajar Yii',
'basePath' => dirname(__DIR__),
'language' => 'id-ID',
'components' => [
'cache' => ['class' => 'yii\caching\FileCache'],
'db' => require __DIR__ . '/db.php',
'request' => [
'cookieValidationKey' => 'ganti-dengan-string-random',
],
],
'params' => $params,
];
return $config;Tiga kunci penting: id (identitas aplikasi, juga dipakai sebagai session cookie prefix), name (nama aplikasi yang tampil di layout), dan cookieValidationKey — wajib string random unik, karena dipakai untuk memvalidasi cookie. Jangan pernah memakai nilai default di production.
Warning
Setiap project Yii2 yang baru dibuat mewajibkan kalian mengganti cookieValidationKey. String ini melindungi cookie dari pemalsuan — jika dibiarkan nilai contoh, attacker bisa memanipulasi cookie session. Generate dengan php -r "echo bin2hex(random_bytes(32));" lalu tempel ke konfigurasi.
Yii3 tidak memiliki satu template monolitik — yiisoft/app adalah template aplikasi web yang mengombinasikan package yiisoft/* sesuai kebutuhan:
composer create-project --prefer-dist yiisoft/app learn-yii3-app
cd learn-yii3-app
composer installTemplate Yii3 menghasilkan struktur berbasis package:
learn-yii3-app/
├── config/ # konfigurasi berbasis package: common, web, console
│ └── packages/ # satu file per package (router, db, view, ...)
├── src/ # kode aplikasi: ApplicationRunner, Handler, ...
├── public/ # public root: index.php
├── resources/ # view templates
├── tests/
├── runtime/ # cache, log
└── composer.jsonPerbedaan paling terlihat: tidak ada controllers/, models/, views/ yang dipaksa — kode aplikasi hidup di src/ dan bisa diorganisasikan bebas sesuai package. Konfigurasi juga terpecah per package di config/packages/. Kita bedah lebih dalam di episode 23; untuk sekarang cukup pahami bahwa ini adalah paradigma berbeda dari template Yii2 yang kita pakai di sebagian besar series.
| Aspek | Yii2 basic (yii2-app-basic) | Yii3 (yiisoft/app) |
|---|---|---|
| PHP | 7.4+ (rekomendasi 8.2+) | 8.2+ wajib |
| Struktur | MVC ketat: controllers/models/views | Bebas: kode di src/, per-package |
| Konfigurasi | Satu array besar | File per package |
| Ekosistem | Monolitik yiisoft/yii2 + ekstensi | Semua yiisoft/* package |
| Dukungan | Keamanan s/d Nov 2027 | S/d 2035 |
Keputusan: series ini memakai Yii2 basic template sebagai project utama, karena dokumentasi, ekstensi, dan contohnya paling lengkap — sedangkan konsep Yii3 kita kuasai di episode 23 dan 25.
Sebelum lanjut, pastikan project kalian berfungsi penuh:
cd learn-yii-basic
php yii serve --port=8080 &
curl -I http://localhost:8080/
php yii migrate/up --interactive=0curl -I harus mengembalikan status HTTP/1.1 200 OK, dan php yii migrate/up harus menyelesaikan migrasi tanpa error. Jika ada yang gagal, periksa error di runtime/logs/app.log — ini kebiasaan yang akan menemani kalian sepanjang series.
Inti yang harus dibawa pulang:
composer create-project yiisoft/yii2-app-basic; jalankan dengan php yii serve.controllers/, models/, views/; hanya web/ yang diekspos publik.config/web.php adalah pusat konfigurasi; cookieValidationKey wajib diganti.yiisoft/app dengan struktur package-based — kita bedah di episode 23.Di episode 4 selanjutnya, kita akan membedah routing, controllers, dan views — bagaimana URL diterjemahkan menjadi action, mengaktifkan pretty URLs, cara render dan layout bekerja, serta peran widgets di halaman. Inilah jantung alur request-response Yii yang akan dipakai hampir di setiap episode berikutnya!