Membuat dan Menjalankan Proyek Yii 2 di ServBay
Ringkasan: Apa itu Yii 2?
Yii 2 adalah framework PHP berkinerja tinggi yang berbasis komponen, dirancang untuk pengembangan aplikasi web modern dengan cepat. Yii 2 mengadopsi pola desain MVC (Model-View-Controller) dan menawarkan seperangkat fitur serta alat yang komprehensif untuk membantu pengembang membangun aplikasi web yang scalable dan berkualitas tinggi secara efisien. Framework ini populer karena kinerja yang luar biasa, arsitektur yang fleksibel, dan fitur bawaan yang kuat seperti cache, keamanan, serta dukungan pengembangan API RESTful.
Fitur Utama dan Keunggulan Yii 2
- Kinerja Tinggi: Yii 2 dioptimalkan secara mendalam untuk menangani permintaan dengan jumlah besar, ideal untuk aplikasi yang membutuhkan performa tinggi.
- Modular: Desain arsitektur yang sangat modular memudahkan pengembang mengelola kode dan menggunakan kembali komponen.
- Keamanan: Menyediakan berbagai fungsi keamanan, termasuk validasi input, filter output, perlindungan CSRF/XSS, serta kerangka otentikasi dan otorisasi.
- Mudah Digunakan: API yang intuitif dan dokumentasi lengkap memudahkan proses belajar dan membuat pengembangan lebih cepat.
- Komunitas Aktif: Komunitas pengembang yang besar dan aktif, serta pustaka ekstensi pihak ketiga yang berlimpah, memudahkan mendapatkan bantuan jika menemui kendala.
- Alat Integrasi: Dilengkapi CLI untuk migrasi database, pembuatan kode, dan tugas lainnya, meningkatkan produktivitas pengembang.
Yii 2 adalah pilihan ideal untuk membangun aplikasi tingkat enterprise, API RESTful, portal web, dan berbagai proyek web lainnya.
Menjalankan Proyek Yii 2 dengan ServBay
ServBay adalah platform pengembangan web lokal yang dibuat khusus untuk macOS dan Windows, menghadirkan integrasi PHP, berbagai database (seperti MySQL, PostgreSQL, MongoDB, Redis), server web (Caddy, Nginx), serta alat developer lain seperti Composer, Node.js, Python, Go, Java, dan lain-lain. Tujuannya adalah memberikan pengalaman pengembangan “langsung pakai” yang mudah dan efisien.
Panduan ini akan memandu Anda menggunakan lingkungan PHP, Composer, dan database dari ServBay untuk membuat dan menjalankan aplikasi dasar Yii 2. Website dites dan dikelola melalui fitur “Website” di ServBay, sehingga Anda dapat mengakses proyek dan mendemonstrasikan fungsionalitas utama dengan langkah sederhana.
Persyaratan Sebelum Memulai
Pastikan Anda telah:
- Menginstall dan menjalankan ServBay di sistem macOS atau Windows Anda.
- Mengaktifkan versi PHP yang dibutuhkan di ServBay (misal PHP 8.3 atau lebih baru).
- Mengaktifkan layanan database yang ingin digunakan (MySQL atau PostgreSQL) serta layanan cache (Memcached dan Redis) di ServBay.
Anda dapat melihat dan mengelola semua paket perangkat lunak dan status layanan di antarmuka utama ServBay.
Membuat Proyek Yii 2
TIP
ServBay menyarankan agar Anda menyimpan file proyek pada direktori berikut untuk memudahkan manajemen struktur dan pengaturan via fitur "Website" ServBay:
- macOS:
/Applications/ServBay/www - Windows:
C:\ServBay\www
Composer: ServBay telah menyediakan Composer secara bawaan, sehingga Anda tidak perlu menginstalnya lagi. Cukup buka Terminal dan gunakan perintah
composer.Buat Direktori Proyek: Buka Terminal, masuk ke direktori root website ServBay, lalu buat direktori proyek baru.
macOS:
bashcd /Applications/ServBay/www mkdir servbay-yii2-app cd servbay-yii2-app1
2
3Windows:
cmdcd C:\ServBay\www mkdir servbay-yii2-app cd servbay-yii2-app1
2
3Buat Proyek Yii 2 dengan Composer: Di dalam folder
servbay-yii2-app, jalankan perintah Composer berikut untuk membuat template aplikasi 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 (
.). Tunggu hingga proses selesai.Masuk ke Direktori Proyek: Pastikan Terminal Anda sudah berada pada direktori root proyek tersebut. Komando selanjutnya akan dijalankan dari sini.
macOS:
bashcd /Applications/ServBay/www/servbay-yii2-app1Windows:
cmdcd C:\ServBay\www\servbay-yii2-app1
Konfigurasi Awal
Setelah proyek Yii 2 dibuat, Anda perlu melakukan beberapa pengaturan dasar, terutama untuk koneksi database dan komponen pendukung.
Pengaturan Koneksi Database: Edit file
config/db.phpdi root proyek. Sesuaikan detail koneksi database sesuai layanan ServBay yang Anda aktifkan (MySQL atau PostgreSQL) dan konfigurasi (biasanya username default adalahroot, password default adalahpasswordkecuali Anda mengubahnya).Anda perlu membuat database baru di layanan database ServBay, misal bernama
servbay_yii2_app. Gunakan Adminer bawaan ServBay atau klien lain seperti Sequel Ace, TablePlus, dsb. Adminer bisa diakses dari bagian database di aplikasi ServBay.Untuk MySQL:
php<?php return [ 'class' => 'yii\db\Connection', 'dsn' => 'mysql:host=127.0.0.1;dbname=servbay_yii2_app', // dbname harus sesuai dengan nama database yang Anda buat 'username' => 'root', // username database Anda 'password' => 'password', // password database Anda 'charset' => 'utf8mb4', // Disarankan utf8mb4 untuk dukungan karakter yang 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', // username database Anda 'password' => 'password', // password database Anda '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.phpsesuai kebutuhan.Konfigurasi Komponen Cache dan Redis: Edit file
config/web.phpdi root proyek. Tambahkan/ubah bagiancomponentsuntuk pengaturan Memcached dan Redis. Port default Memcached di ServBay adalah11211dan Redis adalah6379.php<?php // ... pengaturan lain 'components' => [ // ... konfigurasi 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 database Redis ], // ... komponen lainnya ], // ... pengaturan lain1
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 bahwa layanan Memcached dan Redis telah dijalankan di ServBay. Untuk menggunakan Redis sebagai cache diperlukan paket
yiisoft/yii2-redis(Composer secara otomatis menginstal dependensi dasar; jika belum, bisa install manualcomposer require yiisoft/yii2-redis). Untuk Memcached, gunakanyiisoft/yii2-memcached. Template dasar biasanya sudah mencakup dependensi utama.
Konfigurasi Web Server (Website ServBay)
Gunakan fitur “Website” dari ServBay untuk mengatur web server lokal (Caddy atau Nginx) agar mengarahkan ke proyek Yii 2.
- Buka Aplikasi ServBay: Jalankan ServBay.
- Navigasi ke Pengaturan Website: Di antarmuka ServBay, cari dan klik menu "Website" atau sejenisnya.
- Tambah Website Baru: Klik tombol tambah website baru (biasanya simbol
+atau opsi "Tambah"). - Isi Detail Website:
- Nama: Masukkan nama yang mudah dikenali, contoh:
My First Yii 2 Dev Site. - Domain: Masukkan domain pengembangan yang ingin Anda akses di browser, seperti
servbay-yii2-test.local. ServBay akan otomatis mengatur DNS lokal ke127.0.0.1. - Jenis Website: Pilih
PHP. - Versi PHP: Pilih versi PHP yang Anda butuhkan (misal
8.3). Pastikan versi tersebut telah diaktifkan di ServBay. - Root Direktori Website: Ini sangat penting. Untuk Yii 2 template basic, public entry point adalah folder
webdi root proyek. Maka, pengaturan root direktori adalah:- macOS:
/Applications/ServBay/www/servbay-yii2-app/web - Windows:
C:\ServBay\www\servbay-yii2-app\web
- macOS:
- Nama: Masukkan nama yang mudah dikenali, contoh:
- Simpan dan Terapkan: Simpan konfigurasi website. ServBay akan otomatis reload server web sesuai konfigurasi baru.
Panduan detail pengaturan website bisa Anda baca di dokumentasi ServBay: Menambahkan Website Pertama.
ServBay secara otomatis akan menerbitkan dan mempercayai sertifikat SSL untuk domain lokal Anda, sehingga Anda bisa mengakses website menggunakan HTTPS dengan aman.
Menambahkan Kode Contoh untuk Demonstrasi Fitur
Untuk mendemonstrasikan penggunaan database dan cache, tambahkan beberapa metode contoh pada controller default Yii 2.
Edit file controllers/SiteController.php di root proyek, tambahkan metode berikut ke dalam 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 exception database
class SiteController extends Controller
{
/**
* Menampilkan homepage.
*
* @return string
*/
public function actionIndex()
{
return $this->render('index');
}
/**
* Demonstrasi penggunaan Memcached.
*
* @return Response
*/
public function actionMemcached()
{
$cache = Yii::$app->cache;
$key = 'my_memcached_test_key';
$data = 'Hello Memcached from ServBay!';
$duration = 60; // Cache selama 60 detik
if ($cache->set($key, $data, $duration)) {
$value = $cache->get($key);
return $this->asText("Memcached berhasil diset. Nilai yang diambil: " . $value);
} else {
return $this->asText("Gagal menyimpan data di Memcached. Silakan cek status layanan dan konfigurasi Memcached.");
}
}
/**
* Demonstrasi 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 diset. Nilai yang diambil: " . $value);
} else {
return $this->asText("Gagal menyimpan data di Redis. Silakan cek status layanan dan konfigurasi Redis.");
}
} catch (\yii\base\Exception $e) {
return $this->asText("Kesalahan Redis: " . $e->getMessage() . ". Silakan cek layanan dan konfigurasi Redis.");
}
}
/**
* Demonstrasi penambahan pengguna ke database.
* Mengasumsikan tabel 'users' sudah ada.
*
* @return Response
*/
public function actionMysqlAdd() // Bisa digunakan untuk PostgreSQL dengan konfigurasi yang tepat
{
try {
$count = Yii::$app->db->createCommand()->insert('users', [
'name' => 'ServBay Demo User', // Nama demo terkait brand
'email' => 'demo-user@servbay.test', // Email demo terkait brand
])->execute();
return $this->asText("Pengguna berhasil ditambahkan. Baris terpengaruh: " . $count);
} catch (DbException $e) {
return $this->asText("Gagal menambahkan pengguna ke database. Error: " . $e->getMessage() . ". Silakan cek layanan database, konfigurasi, dan pastikan tabel 'users' sudah ada.");
}
}
/**
* Demonstrasi mengambil data pengguna dari database.
* Mengasumsikan tabel 'users' sudah ada.
*
* @return Response
*/
public function actionMysql() // Bisa digunakan untuk PostgreSQL dengan konfigurasi yang tepat
{
try {
$users = Yii::$app->db->createCommand('SELECT id, name, email FROM users')->queryAll();
// Output diformat, hindari mengembalikan data yang sensitif atau format acak
$output = "Daftar Pengguna:\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 pengguna dari database. Error: " . $e->getMessage() . ". Silakan cek layanan database, konfigurasi, dan pastikan tabel 'users' sudah ada.");
}
}
// Jika Anda menggunakan PostgreSQL, bisa menambah metode action khusus, tapi biasanya cukup menggunakan komponen db yang sama
// public function actionPgsqlAdd() { ... }
// public function actionPgsql() { ... }
/**
* Format output sebagai teks biasa.
* @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;
}
/**
* Format 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
Perhatikan bahwa pada actionMysqlAdd dan actionMysql, sudah ditambahkan penanganan error serta format output yang lebih rapih, dan nilai demo mengikuti brand ServBay.
Edit file views/site/index.php di root proyek, ini adalah file view untuk actionIndex. Anda dapat mempertahankan konten default atau modifikasi:
php
<?php
/* @var $this yii\web\View */
/* @var $name string */
/* @var $message string */
/* @var $exception Exception */
use yii\helpers\Html;
$this->title = 'Aplikasi Yii2 Saya di ServBay'; // Update judul
?>
<div class="site-index">
<div class="jumbotron">
<h1>Selamat!</h1>
<p class="lead">Anda telah berhasil membuat aplikasi Yii2 dan mengkonfigurasinya 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') ?>">Tes Memcached</a></li>
<li><a href="<?= Html::toRoute('site/redis') ?>">Tes Redis</a></li>
<li><a href="<?= Html::toRoute('site/mysql-add') ?>">Tambah pengguna ke DB</a> (Memerlukan tabel 'users')</li>
<li><a href="<?= Html::toRoute('site/mysql') ?>">Ambil data pengguna dari DB</a> (Memerlukan tabel 'users')</li>
</ul>
<p>Pastikan layanan Memcached, Redis, dan database (MySQL/PostgreSQL) berjalan di ServBay dan konfigurasi sudah benar di `config/web.php` dan `config/db.php`.</p>
<p>Untuk contoh database, Anda perlu membuat tabel 'users' dengan migrasi Yii (lihat di bawah).</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
Pada view, link sudah ditambahkan untuk memudahkan Anda menguji method di controller.
Database Relasional: Membuat Struktur Tabel (Migrasi)
Agar contoh pada actionMysqlAdd dan actionMysql berjalan, pastikan Anda telah membuat tabel users di database. Yii menyarankan menggunakan fitur migrasi untuk manajemen perubahan schema database.
Gunakan Console Yii untuk Membuat File Migrasi: Buka Terminal, pastikan di direktori root proyek, lalu jalankan perintah berikut.
Path root proyek:
- macOS:
/Applications/ServBay/www/servbay-yii2-app - Windows:
C:\ServBay\www\servbay-yii2-app
bashphp yii migrate/create create_users_table1Akan muncul konfirmasi, ketik
yeslalu enter. File migrasi baru dengan nama sepertimYYYYMMDD_HHMMSS_create_users_table.phpakan dibuat di foldermigrations.- macOS:
Edit File Migrasi: Buka file migrasi yang baru dibuat, edit bagian
up()untuk menentukan struktur tabelusers.php<?php use yii\db\Migration; /** * Membuat tabel `{{%users}}`. */ class mXXXXXXXXXXXXXX_create_users_table extends Migration // XXXXXXXXXXXXXX adalah timestamp { /** * {@inheritdoc} */ public function up() { $this->createTable('{{%users}}', [ // Dengan {{%users}} mendukung prefix table jika diperlukan '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 agar pencarian lebih efisien $this->createIndex( 'idx-users-email', '{{%users}}', 'email', true // true berarti index unik ); } /** * {@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
46Pastikan nama file migrasi sesuai dengan file yang dihasilkan.
Jalankan Migrasi: Pastikan masih di root proyek, lalu jalankan perintah berikut untuk menjalankan migrasi dan membuat tabel di database.
bashphp yii migrate1Ikuti konfirmasi dengan mengetik
yes, lalu enter. Jika segala pengaturan sudah benar, tabel akan berhasil dibuat.
Mengakses Website dan Uji Proyek
Sekarang Anda dapat membuka browser dan akses domain yang telah Anda atur di ServBay, contoh: https://servbay-yii2-test.local.
- Buka
https://servbay-yii2-test.localuntuk melihat halaman sambutan aplikasi Yii2 dan link demonstrasi yang sudah ditambahkan. - Klik link "Tes Memcached" atau akses
https://servbay-yii2-test.local/index.php?r=site/memcached: Jika Memcached berjalan dan konfigurasi benar, Anda akan melihat output teks "Memcached berhasil diset...". - Klik "Tes Redis" atau akses
https://servbay-yii2-test.local/index.php?r=site/redis: Jika Redis berjalan dan konfigurasi benar, hasil "Redis berhasil diset..." akan ditampilkan. - Klik "Tambah pengguna ke DB" atau akses
https://servbay-yii2-test.local/index.php?r=site/mysql-add: Jika database berjalan, konfigurasi benar, dan tabel 'users' sudah dibuat via migrasi, maka pesan "Pengguna berhasil ditambahkan..." akan muncul (setiap akses akan mencoba menambah pengguna baru; jika email sudah ada dan diset unik, maka akan gagal). - Klik "Ambil data pengguna dari DB" atau akses
https://servbay-yii2-test.local/index.php?r=site/mysql: Jika database berjalan dan tabel tersedia, daftar pengguna akan ditampilkan.
Jika mendapati kendala, periksa apakah layanan terkait di ServBay (PHP, server web, database, Memcached, Redis) aktif, konfigurasi proyek Yii 2 (config/db.php, config/web.php) sudah tepat, serta pastikan tabel database sudah berhasil dibuat.
FAQ (Pertanyaan yang Sering Ditanyakan)
- Mengapa domain tidak bisa diakses atau muncul error sertifikat? Pastikan domain sudah ditambahkan di “Website” ServBay dan aplikasi ServBay berjalan. ServBay melakukan konfigurasi otomatis DNS lokal dan SSL. Jika mengalami error sertifikat, pastikan sudah mempercayai ServBay User CA atau Public CA. Ikuti panduan pada dokumentasi ServBay.
- Perintah Composer gagal dijalankan? Pastikan Composer sudah diaktifkan dari antarmuka ServBay dan eksekusi perintah dari Terminal/Command Prompt di macOS atau Windows. ServBay otomatis menambahkan Composer ke PATH.
- Koneksi database gagal? Periksa layanan database (MySQL/PostgreSQL) di ServBay sudah berjalan. Cek lagi konfigurasi
dsn,username,passworddiconfig/db.phpagar sesuai dengan pengaturan ServBay. Pastikan databaseservbay_yii2_appsudah dibuat. Gunakan Adminer untuk cek koneksi dan lihat list database. - Koneksi Memcached/Redis gagal? Pastikan layanan Memcached/Redis aktif di ServBay. Pastikan konfigurasi
hostdanportdiconfig/web.phpsudah benar (default127.0.0.1dan port sesuai). - Migrasi database (
php yii migrate) gagal? Pastikanconfig/db.phpsudah dikonfigurasi dengan benar, layanan database berjalan, dan database telah tersedia. Migrasi membutuhkan koneksi database yang valid. - Mengapa tampil pesan tabel tidak ada pada
actionMysqlAdd/actionMysql? Jalankan perintah migrasiphp yii migrateuntuk membuat tabel 'users'. - Bagaimana cara melihat log error PHP? ServBay mengelola log error PHP, log server web, dll., secara terpusat. Buka bagian "Log" di aplikasi ServBay untuk melihat detail dan proses troubleshooting.
Kesimpulan
Dengan ServBay, Anda dapat dengan mudah membangun lingkungan pengembangan lokal di macOS dan Windows untuk menjalankan proyek Yii 2 yang lengkap. Composer bawaan, manajemen versi PHP, layanan database serta cache terintegrasi, dan konfigurasi website yang simpel, membuat proses setup dan pengembangan Yii 2 menjadi jauh lebih efisien. Ikuti panduan ini agar Anda bisa mulai proyek Yii 2 dengan cepat dan manfaatkan berbagai alat dari ServBay untuk meningkatkan produktivitas dan kenyamanan dalam pengembangan.
Selamat berkarya!
