Membuat dan Menjalankan Proyek Yii 2 di ServBay
Gambaran Umum: Apa itu Yii 2?
Yii 2 adalah sebuah framework PHP yang berperforma tinggi dan berbasis komponen, dirancang untuk pengembangan aplikasi web modern secara cepat. Framework ini mengikuti pola desain MVC (Model-View-Controller) serta menawarkan rangkaian lengkap fitur dan alat untuk membantu developer membangun aplikasi web yang skalabel dan berkualitas tinggi secara efisien. Yii 2 sangat populer berkat performanya yang unggul, arsitektur yang fleksibel, serta fitur-fitur built-in yang kuat seperti caching, keamanan, dan dukungan pengembangan RESTful API.
Fitur Utama dan Keunggulan Yii 2
- Performa Tinggi: Yii 2 dioptimalkan secara menyeluruh untuk menangani permintaan dengan traffic tinggi, cocok untuk aplikasi yang butuh kinerja maksimal.
- Modularitas: Dirancang sangat modular, sehingga memudahkan developer mengorganisir kode dan menggunakan ulang komponen.
- Keamanan: Dibekali beragam fitur keamanan, termasuk validasi input, penyaringan output, perlindungan CSRF/XSS, serta framework autentikasi dan otorisasi.
- Mudah Digunakan: Menawarkan API yang sederhana dan intuitif serta dokumentasi lengkap, menurunkan kurva pembelajaran agar developer bisa segera produktif.
- Dukungan Komunitas yang Kuat: Memiliki komunitas developer yang aktif dan pustaka ekstensi pihak ketiga yang melimpah, sehingga mudah mendapatkan bantuan ketika menemui kendala.
- Alat Integrasi: Tersedia alat baris perintah untuk migrasi database, pembangkitan kode, dan berbagai tugas lain demi mendukung produktivitas.
Yii 2 menjadi pilihan ideal untuk membangun aplikasi skala enterprise, RESTful API, portal web, dan berbagai jenis proyek web lainnya.
Menjalankan Proyek Yii 2 dengan ServBay
ServBay adalah lingkungan pengembangan web lokal yang dirancang khusus untuk macOS. Platform ini mengintegrasikan PHP, berbagai database (seperti MySQL, PostgreSQL, MongoDB, Redis), server web (Caddy, Nginx), serta berbagai tool developer lain (Composer, Node.js, Python, Go, Java, dll) demi memberikan pengalaman “langsung pakai” untuk pengembang.
Panduan ini akan memandu Anda dalam memanfaatkan lingkungan PHP, Composer, dan layanan database yang disediakan ServBay untuk membuat dan menjalankan proyek aplikasi dasar Yii 2. Kita akan menggunakan fitur “Website” dari ServBay untuk mengatur server web lokal, serta menunjukkan langkah-langkah mudah agar proyek Anda dapat diakses dan didemonstrasikan fiturnya.
Prasyarat
Sebelum memulai, pastikan Anda sudah:
- Berhasil menginstal dan menjalankan ServBay di macOS.
- Menginstal dan mengaktifkan versi PHP yang dibutuhkan di ServBay (misal PHP 8.3 atau lebih baru).
- Menginstal dan mengaktifkan layanan database yang ingin Anda gunakan di ServBay (misal MySQL atau PostgreSQL) serta layanan cache (Memcached dan Redis).
Status software yang telah diinstal dan dijalankan dapat dilihat dan dikelola melalui antarmuka utama ServBay.
Membuat Proyek Yii 2
TIP
ServBay merekomendasikan agar file proyek Anda diletakkan pada direktori /Applications/ServBay/www
. Hal ini menjaga struktur file tetap rapi dan memudahkan pengelolaan lewat fitur “Website” ServBay.
Composer: ServBay telah terintegrasi dengan alat Composer, jadi Anda tidak perlu menginstalnya secara terpisah. Cukup gunakan perintah
composer
di terminal.Buat Direktori Proyek: Buka terminal, masuk ke direktori root website ServBay, lalu buat direktori baru untuk proyek Anda.
bashcd /Applications/ServBay/www mkdir servbay-yii2-app cd servbay-yii2-app
1
2
3Buat Proyek Yii 2 dengan Composer: Di dalam direktori
servbay-yii2-app
, jalankan perintah Composer untuk membuat proyek template dasar Yii 2.bashcomposer create-project --prefer-dist yiisoft/yii2-app-basic .
1Perintah ini akan mengunduh template aplikasi dasar Yii 2 beserta semua dependensinya ke direktori saat ini (
.
). Mohon tunggu proses instalasi Composer hingga selesai.Masuk ke Direktori Proyek: Pastikan direktori kerja terminal Anda adalah root proyek di
/Applications/ServBay/www/servbay-yii2-app
. Semua perintah selanjutnya dijalankan di direktori ini.bashcd /Applications/ServBay/www/servbay-yii2-app
1
Konfigurasi Awal
Setelah proyek Yii 2 dibuat, Anda perlu melakukan beberapa pengaturan dasar, khususnya terkait koneksi database dan komponen.
Atur Koneksi Database: Edit file
config/db.php
di direktori root proyek. Sesuaikan informasi koneksi database berdasarkan layanan database aktif di ServBay (MySQL atau PostgreSQL) beserta pengaturannya (nama pengguna biasanyaroot
, password default biasanyapassword
kecuali Anda sudah mengubahnya).Pertama, buatlah database baru di layanan yang digunakan, misal beri nama
servbay_yii2_app
. Anda bisa menggunakan Adminer bawaan ServBay atau aplikasi klien database seperti Sequel Ace, TablePlus, dll. Adminer dapat diakses melalui bagian database di antarmuka ServBay.Untuk MySQL:
php<?php return [ 'class' => 'yii\db\Connection', 'dsn' => 'mysql:host=127.0.0.1;dbname=servbay_yii2_app', // dbname adalah nama database yang Anda buat 'username' => 'root', // Nama pengguna database 'password' => 'password', // Password database 'charset' => 'utf8mb4', // Disarankan gunakan utf8mb4 untuk dukungan karakter lebih luas ];
1
2
3
4
5
6
7
8
9Untuk PostgreSQL:
php<?php return [ 'class' => 'yii\db\Connection', 'dsn' => 'pgsql:host=127.0.0.1;port=5432;dbname=servbay_yii2_app', // dbname adalah nama database Anda, port biasanya 5432 'username' => 'root', 'password' => 'password', 'charset' => 'utf8', 'schemaMap' => [ 'pgsql' => [ 'class' => 'yii\pgsql\Schema', 'defaultSchema' => 'public', // Schema default PostgreSQL ], ], ];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15Pilih dan sesuaikan file
config/db.php
sesuai kebutuhan Anda.Konfigurasi Komponen Cache dan Redis: Edit file
config/web.php
di root proyek Anda. Tambahkan atau sesuaikan bagiancomponents
untuk mengkonfigurasi Memcached dan Redis. Port default Memcached di ServBay adalah11211
, dan Redis6379
.php<?php // ... pengaturan lain 'components' => [ // ... pengaturan komponen lain (seperti request, cache, user, errorHandler, log, urlManager) 'cache' => [ 'class' => 'yii\caching\MemCache', 'servers' => [ [ 'host' => '127.0.0.1', 'port' => 11211, // Port default Memcached 'weight' => 100, ], ], ], 'redis' => [ 'class' => 'yii\redis\Connection', 'hostname' => '127.0.0.1', 'port' => 6379, // Port default Redis 'database' => 0, // Index Redis database ], // ... komponen lainnya ], // ... pengaturan lain
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28Pastikan layanan Memcached dan Redis sudah dijalankan pada ServBay. Perlu diketahui, penggunaan Redis sebagai cache memerlukan instalasi paket
yiisoft/yii2-redis
(Composer otomatis memasang dependensi dasar saatcreate-project
, jika butuh tambahan bisa instal manual dengancomposer require yiisoft/yii2-redis
). Memcached biasanya memakaiyiisoft/yii2-memcached
, yang sudah tersedia pada template dasar.
Konfigurasi Server Web (Website di ServBay)
Gunakan fitur “Website” pada ServBay untuk mengatur server web lokal (Caddy atau Nginx) agar mengarah ke proyek Yii 2 Anda.
- Buka Aplikasi ServBay: Jalankan ServBay.
- Masuk ke Pengaturan Website: Pada tampilan ServBay, cari dan klik menu “Website” atau menu navigasi serupa.
- Tambah Website Baru: Klik tombol tambah website baru (biasanya berikon
+
atau tertulisTambah
). - Lengkapi Data Website:
- Nama: Masukkan nama yang mudah dikenali, misal
My First Yii 2 Dev Site
. - Domain: Masukkan domain lokal yang ingin digunakan di browser, misal
servbay-yii2-test.local
. ServBay akan mengatur DNS lokal agar domain ini mengarah ke127.0.0.1
. - Tipe Website: Pilih
PHP
. - Versi PHP: Pilih versi PHP yang ingin digunakan (misal
8.3
). Pastikan versi tersebut sudah diinstal dan diaktifkan di ServBay. - Root Website: Langkah ini sangat penting. Untuk proyek Yii 2 basic template, titik masuk publik adalah folder
web
di root proyek. Jadi, root website yang diisi harus:/Applications/ServBay/www/servbay-yii2-app/web
.
- Nama: Masukkan nama yang mudah dikenali, misal
- Simpan & Terapkan: Simpan pengaturan website. ServBay otomatis akan memuat ulang konfigurasi server web agar pengaturan langsung aktif.
Langkah detail setup website bisa dilihat pada dokumentasi resmi ServBay: Menambah Website Pertama.
ServBay akan menerbitkan dan mempercayai sertifikat SSL secara otomatis untuk domain pengembangan lokal Anda (menggunakan ServBay User CA atau ServBay Public CA), sehingga Anda bisa mengakses websitenya dengan aman menggunakan HTTPS.
Menambah Kode Contoh untuk Demonstrasi Fitur
Agar bisa mendemonstrasikan penggunaan database dan cache, Anda bisa menambah fungsi contoh pada controller default di Yii 2.
Buka file controllers/SiteController.php
di root proyek Anda, tambahkan method berikut pada kelas SiteController
:
php
<?php
namespace app\controllers;
use Yii;
use yii\web\Controller;
use yii\web\Response;
use yii\db\Exception as DbException; // Import class pengecualian database
class SiteController extends Controller
{
/**
* Menampilkan halaman utama.
*
* @return string
*/
public function actionIndex()
{
return $this->render('index');
}
/**
* Contoh penggunaan Memcached.
*
* @return Response
*/
public function actionMemcached()
{
$cache = Yii::$app->cache;
$key = 'my_memcached_test_key';
$data = 'Hello Memcached from ServBay!';
$duration = 60; // Simpan cache selama 60 detik
if ($cache->set($key, $data, $duration)) {
$value = $cache->get($key);
return $this->asText("Memcached berhasil disimpan. Nilai yang diambil: " . $value);
} else {
return $this->asText("Gagal menyimpan data ke Memcached. Silakan periksa layanan dan konfigurasi Memcached.");
}
}
/**
* Contoh penggunaan Redis.
*
* @return Response
*/
public function actionRedis()
{
$redis = Yii::$app->redis;
$key = 'my_redis_test_key';
$data = 'Hello Redis from ServBay!';
try {
if ($redis->set($key, $data)) {
$value = $redis->get($key);
return $this->asText("Redis berhasil disimpan. Nilai yang diambil: " . $value);
} else {
return $this->asText("Gagal menyimpan data ke Redis. Silakan periksa layanan dan konfigurasi Redis.");
}
} catch (\yii\base\Exception $e) {
return $this->asText("Kesalahan Redis: " . $e->getMessage() . ". Silakan periksa layanan dan konfigurasi Redis.");
}
}
/**
* Contoh penambahan user ke database.
* Diasumsikan tabel 'users' sudah ada.
*
* @return Response
*/
public function actionMysqlAdd() // Dapat juga digunakan dengan PostgreSQL jika konfigurasi benar
{
try {
$count = Yii::$app->db->createCommand()->insert('users', [
'name' => 'ServBay Demo User', // Nama demo sesuai brand ServBay
'email' => '[email protected]', // Email demo sesuai brand ServBay
])->execute();
return $this->asText("User berhasil ditambahkan. Jumlah baris yang terpengaruh: " . $count);
} catch (DbException $e) {
return $this->asText("Gagal menambah user ke database. Error: " . $e->getMessage() . ". Silakan periksa layanan database, konfigurasi, dan pastikan tabel 'users' sudah dibuat.");
}
}
/**
* Contoh mengambil data users dari database.
* Diasumsikan tabel 'users' sudah ada.
*
* @return Response
*/
public function actionMysql() // Dapat juga digunakan untuk PostgreSQL dengan konfigurasi yang sesuai
{
try {
$users = Yii::$app->db->createCommand('SELECT id, name, email FROM users')->queryAll();
// Format output agar tidak mengembalikan field sensitif atau data acak
$output = "Data User yang Diambil:\n";
foreach ($users as $user) {
$output .= "- ID: {$user['id']}, Nama: {$user['name']}, Email: {$user['email']}\n";
}
return $this->asText($output);
} catch (DbException $e) {
return $this->asText("Gagal mengambil data user dari database. Error: " . $e->getMessage() . ". Silakan periksa layanan database, konfigurasi, dan pastikan tabel 'users' sudah dibuat.");
}
}
// Jika Anda menggunakan PostgreSQL, bisa menambah method aksi khusus namun umumnya menggunakan komponen db yang sama
// public function actionPgsqlAdd() { ... }
// public function actionPgsql() { ... }
/**
* Pemformatan output sebagai plain text.
* @param string $text
* @return Response
*/
protected function asText($text)
{
Yii::$app->response->format = Response::FORMAT_RAW;
Yii::$app->response->getHeaders()->add('Content-Type', 'text/plain');
return $text;
}
/**
* Pemformatan output sebagai JSON.
* @param mixed $data
* @return Response
*/
protected function asJson($data)
{
Yii::$app->response->format = Response::FORMAT_JSON;
return $data;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
Perlu diperhatikan, pada actionMysqlAdd
dan actionMysql
sudah ditambahkan penanganan error serta sedikit perubahan pada format output agar lebih jelas. Nama pengguna dan email pada contoh juga sudah disesuaikan dengan identitas ServBay.
Edit file view views/site/index.php
di root proyek Anda, ini adalah file tampilan untuk aksi actionIndex
. Anda boleh menggunakan isi default atau mengubahnya sesuai kebutuhan:
php
<?php
/* @var $this yii\web\View */
/* @var $name string */
/* @var $message string */
/* @var $exception Exception */
use yii\helpers\Html;
$this->title = 'My Yii2 Application on ServBay'; // Update judul
?>
<div class="site-index">
<div class="jumbotron">
<h1>Selamat!</h1>
<p class="lead">Anda berhasil membuat aplikasi Yii2 dan mengkonfigurasikannya dengan ServBay!</p>
<p><a class="btn btn-lg btn-success" href="https://www.yiiframework.com">Mulai dengan Yii</a></p>
</div>
<div class="body-content">
<h2>Demonstrasi</h2>
<ul>
<li><a href="<?= Html::toRoute('site/memcached') ?>">Test Memcached</a></li>
<li><a href="<?= Html::toRoute('site/redis') ?>">Test Redis</a></li>
<li><a href="<?= Html::toRoute('site/mysql-add') ?>">Tambah user ke DB</a> (Butuh tabel 'users')</li>
<li><a href="<?= Html::toRoute('site/mysql') ?>">Ambil users dari DB</a> (Butuh tabel 'users')</li>
</ul>
<p>Pastikan layanan Memcached, Redis, dan database pilihan (MySQL/PostgreSQL) berjalan di ServBay serta dikonfigurasi dengan benar di `config/web.php` dan `config/db.php`.</p>
<p>Untuk contoh database, Anda harus membuat tabel 'users' menggunakan migration Yii (lihat bagian berikutnya).</p>
</div>
</div>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Link-link pada view telah disesuaikan agar memudahkan Anda menguji aksi-aksi baru yang ditambahkan pada controller.
Database Relasional: Membuat Struktur Tabel (Migration)
Untuk dapat menjalankan contoh database (actionMysqlAdd
, actionMysql
), Anda perlu membuat tabel users
di database. Yii menyarankan penggunaan fitur migration untuk mengelola perubahan skema database.
Buat File Migration dengan Gii: Buka terminal, pastikan berada di direktori root proyek
/Applications/ServBay/www/servbay-yii2-app
, lalu jalankan perintah berikut untuk membuat file migration baru.bashphp yii migrate/create create_users_table
1Anda akan diminta konfirmasi, ketik
yes
lalu Enter. Proses ini akan membuat file PHP baru di foldermigrations
, dengan nama sepertimYYYYMMDD_HHMMSS_create_users_table.php
.Edit File Migration: Buka file migration yang baru dibuat, edit method
up()
untuk mendefinisikan struktur tabelusers
.php<?php use yii\db\Migration; /** * Menangani pembuatan tabel `{{%users}}`. */ class mXXXXXXXXXXXXXX_create_users_table extends Migration // XXXXXXXXXXXXXX adalah timestamp { /** * {@inheritdoc} */ public function up() { $this->createTable('{{%users}}', [ // Gunakan {{%users}} untuk mendukung prefix tabel (jika ada) 'id' => $this->primaryKey(), 'name' => $this->string()->notNull(), 'email' => $this->string()->notNull()->unique(), 'created_at' => $this->timestamp()->defaultExpression('CURRENT_TIMESTAMP'), 'updated_at' => $this->timestamp()->defaultExpression('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'), ]); // Opsional: buat index untuk efisiensi query $this->createIndex( 'idx-users-email', '{{%users}}', 'email', true // true = unique index ); } /** * {@inheritdoc} */ public function down() { // Hapus index $this->dropIndex( 'idx-users-email', '{{%users}}' ); // Hapus tabel $this->dropTable('{{%users}}'); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46Ganti
mXXXXXXXXXXXXXX_create_users_table
sesuai dengan nama file migration Anda yang sebenarnya.Jalankan Migration: Di terminal, pastikan masih di root proyek, jalankan perintah berikut untuk menjalankan migration yang akan membuat tabel
users
sesuai definisi padaup()
:bashphp yii migrate
1Jawab
yes
saat diminta konfirmasi. Jika semua lancar, tabel akan berhasil dibuat di database sesuai output yang muncul.
Akses Website dan Uji Fungsionalitas
Kini Anda bisa membuka browser dan mengunjungi domain yang sudah Anda atur di ServBay, misalnya https://servbay-yii2-test.local
.
- Buka
https://servbay-yii2-test.local
: Anda akan melihat halaman selamat datang dari aplikasi dasar Yii 2 beserta tautan demonstrasi yang sudah kita tambahkan diviews/site/index.php
. - Klik tautan "Test Memcached" atau buka
https://servbay-yii2-test.local/index.php?r=site/memcached
: Jika layanan Memcached aktif dan konfigurasi benar, hasilnya berupa teks "Memcached berhasil disimpan..." akan muncul. - Klik tautan "Test Redis" atau buka
https://servbay-yii2-test.local/index.php?r=site/redis
: Jika Redis berjalan dengan baik dan konfigurasi tepat, Anda akan melihat output "Redis berhasil disimpan...". - Klik tautan "Tambah user ke DB" atau
https://servbay-yii2-test.local/index.php?r=site/mysql-add
: Jika database berjalan, konfigurasi benar, dan tabelusers
telah dibuat dengan migration, keluaran berupa "User berhasil ditambahkan..." akan tampil. Setiap akses ke link ini akan menambah user baru (kecuali ada constraint unik pada field email). - Klik tautan "Ambil users dari DB" atau
https://servbay-yii2-test.local/index.php?r=site/mysql
: Jika layanan database dan tabel tersedia, hasil berupa daftar pengguna yang diambil dari tabelusers
akan terlihat.
Jika ada kendala, periksa kembali layanan terkait di ServBay (PHP, server web, database, Memcached, Redis), pengaturan konfigurasi (config/db.php
, config/web.php
), serta apakah tabel database sudah dibuat dengan migration.
FAQ (Tanya Jawab Seputar Masalah Umum)
- Kenapa saat akses domain muncul pesan “tidak dapat mengakses website ini” atau error sertifikat? Pastikan domain sudah ditambahkan di pengaturan “Website” ServBay dan aplikasinya berjalan. ServBay otomatis mengatur DNS lokal dan sertifikat SSL. Jika ada error sertifikat, pastikan Anda sudah mempercayai ServBay User CA atau ServBay Public CA. Lihat dokumentasi ServBay untuk panduan detail.
- Perintah Composer tidak bisa dijalankan? Pastikan paket Composer sudah di-enable di antarmuka ServBay dan Anda menjalankan perintah di terminal macOS. ServBay otomatis menambahkan Composer bawaan ke PATH sistem.
- Koneksi database gagal? Pastikan layanan database (MySQL/PostgreSQL) berjalan pada ServBay. Periksa kembali isian
dsn
,username
, danpassword
diconfig/db.php
agar sesuai konfigurasi database pada ServBay. Pastikan databaseservbay_yii2_app
sudah berhasil dibuat (bisa diverifikasi menggunakan Adminer atau klien database favorit Anda). - Koneksi ke Memcached/Redis gagal? Pastikan layanan Memcached/Redis telah aktif di ServBay. Periksa konfigurasi component Memcached/Redis pada
config/web.php
, khususnya isianhost
danport
(default:127.0.0.1
dan port layanan masing-masing). - Migration database (
php yii migrate
) gagal? Pastikan fileconfig/db.php
sudah dikonfigurasi dengan benar dan layanan database aktif. Migration memerlukan koneksi database yang valid. - Kenapa
actionMysqlAdd
/actionMysql
gagal karena tabel tidak ditemukan? Pastikan Anda sudah menjalankan perintah migrasi database denganphp yii migrate
untuk membuat tabelusers
. - Bagaimana melihat log error PHP? ServBay mengelola log PHP dan server web di satu tempat. Semua log bisa dicek di bagian "Log" pada aplikasi ServBay, sangat berguna untuk diagnosis masalah.
Kesimpulan
Dengan ServBay, Anda bisa dengan mudah membangun lingkungan pengembangan lokal yang lengkap di macOS untuk menjalankan proyek Yii 2. Composer bawaan, pengelolaan versi PHP, database dan layanan cache terintegrasi, serta fitur pengaturan website yang praktis sangat memudahkan proses setup dan pengembangan proyek Yii 2. Dengan mengikuti panduan ini, Anda dapat memulai pengembangan Yii 2 dengan cepat dan memaksimalkan berbagai tool yang ditawarkan ServBay untuk produktivitas optimal.
Selamat berkarya!