Cara Membina dan Menjalankan Projek Yii 2 dalam ServBay
Ringkasan: Apa itu Yii 2?
Yii 2 ialah rangka kerja PHP berprestasi tinggi berasaskan komponen, direka untuk membangunkan aplikasi Web moden dengan cepat. Ia mengikuti corak reka bentuk MVC (Model-View-Controller), menawarkan pelbagai ciri dan alat yang membantu pembangun membina aplikasi Web yang boleh diskala dan berkualiti tinggi secara efisien. Yii 2 amat digemari kerana prestasinya yang hebat, seni bina fleksibel, serta ciri terbina dalam seperti cache, keselamatan, dan sokongan pembangunan API RESTful.
Ciri Utama & Kelebihan Yii 2
- Prestasi Tinggi: Yii 2 dioptimumkan untuk menangani permintaan serentak yang tinggi, sesuai untuk aplikasi yang kritikal terhadap prestasi.
- Modular: Direka agar sangat modular, memudahkan organisasi kod dan penggunaan semula komponen.
- Keselamatan: Dilengkapi pelbagai sistem keselamatan termasuk validasi input, penapisan output, perlindungan CSRF/XSS, serta kerangka autentikasi dan autorisasi.
- Mudah Digunakan: Antaramuka API mesra pengguna dan dokumentasi terperinci, memudahkan pembangun mula dengan pantas.
- Komuniti Aktif: Komuniti pembangun yang aktif dan koleksi perpustakaan pihak ketiga yang luas memudahkan penyelesaian masalah.
- Alat Integrasi: Termasuk alat baris arahan untuk migrasi pangkalan data, penjanaan kod dan pelbagai tugas lain, membantu mempercepatkan proses pembangunan.
Yii 2 adalah pilihan ideal untuk membina aplikasi peringkat perusahaan, API RESTful, portal laman web dan pelbagai jenis projek Web.
Menjalankan Projek Yii 2 Menggunakan ServBay
ServBay ialah persekitaran pembangunan Web tempatan yang dibina khusus untuk macOS dan Windows. Ia membawakan PHP, pelbagai pangkalan data (MySQL, PostgreSQL, MongoDB, Redis), pelayan Web (Caddy, Nginx), serta pelbagai alat pembangun (Composer, Node.js, Python, Go, Java dan lain-lain), menyediakan platform pembangunan yang 'plug-and-play'.
Dokumen ini akan membimbing anda untuk memanfaatkan persekitaran PHP, alat Composer serta servis pangkalan data yang disediakan ServBay untuk membina dan menjalankan projek asas aplikasi Yii 2. Kita akan memanfaatkan fungsi "Laman Web" ServBay untuk mengkonfigurasi pelayan Web tempatan serta memaparkan demonstrasi ciri projek anda dengan mudah.
Syarat Asas
Sebelum bermula, pastikan anda telah:
- Memasang dan menjalankan ServBay di macOS atau Windows.
- Memasang dan mengaktifkan versi PHP yang diperlukan dalam ServBay (contohnya PHP 8.3 atau ke atas).
- Memasang dan mengaktifkan pangkalan data pilihan anda (MySQL atau PostgreSQL) serta servis cache (Memcached dan Redis).
Anda boleh menyemak status dan mengurus semua pakej perisian yang dipasang melalui antara muka utama ServBay.
Membina Projek Yii 2
TIP
ServBay mengesyorkan anda menyimpan fail projek di direktori berikut untuk menyusun struktur fail dengan lebih kemas dan memudahkan pengurusan melalui fungsi "Laman Web":
- macOS:
/Applications/ServBay/www
- Windows:
C:\ServBay\www
Composer: ServBay telah menyediakan alat Composer secara terbina dalam. Tiada pemasangan tambahan diperlukan; cuma gunakan arahan
composer
terus dari terminal anda.Cipta direktori projek: Buka terminal, pergi ke direktori root laman web ServBay dan buat folder projek baharu.
macOS:
bashcd /Applications/ServBay/www mkdir servbay-yii2-app cd servbay-yii2-app
1
2
3Windows:
cmdcd C:\ServBay\www mkdir servbay-yii2-app cd servbay-yii2-app
1
2
3Cipta projek Yii 2 menggunakan Composer: Jalankan arahan Composer di direktori
servbay-yii2-app
untuk menyediakan kerangka aplikasi asas Yii 2.bashcomposer create-project --prefer-dist yiisoft/yii2-app-basic .
1Arahan ini akan memuat turun templat aplikasi asas Yii 2 dan segala keperluan ke dalam direktori semasa (
.
). Tunggu sehingga proses selesai.Masuk ke direktori projek: Pastikan terminal anda berada dalam root projek sebelum langkah seterusnya.
macOS:
bashcd /Applications/ServBay/www/servbay-yii2-app
1Windows:
cmdcd C:\ServBay\www\servbay-yii2-app
1
Konfigurasi Permulaan
Selepas penciptaan projek, lakukan beberapa konfigurasi asas, khususnya sambungan pangkalan data dan tetapan komponen aplikasi.
Konfigurasi sambungan pangkalan data: Edit fail
config/db.php
di root projek. Tukar maklumat sambungan mengikut servis pangkalan data yang aktif di ServBay (MySQL atau PostgreSQL), dan tetapan akaun (secara lalai biasanyaroot
danpassword
, bergantung jika anda ada membuat perubahan).Mula-mula, cipta pangkalan data baharu dalam ServBay, contohnya
servbay_yii2_app
. Anda boleh gunakan alat Adminer yang dibekalkan ServBay atau mana-mana klien pangkalan data pilihan anda (Sequel Ace, TablePlus dan sebagainya). Adminer boleh diakses dari bahagian pangkalan data dalam aplikasi ServBay.Untuk MySQL:
php<?php return [ 'class' => 'yii\db\Connection', 'dsn' => 'mysql:host=127.0.0.1;dbname=servbay_yii2_app', // dbname mengikut nama pangkalan data yang anda cipta 'username' => 'root', // nama pengguna pangkalan data anda 'password' => 'password', // katalaluan pangkalan data anda 'charset' => 'utf8mb4', // disarankan guna utf8mb4 untuk sokongan pelbagai watak ];
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 mengikut nama pangkalan data anda, port biasanya 5432 'username' => 'root', // nama pengguna pangkalan data anda 'password' => 'password', // katalaluan pangkalan data anda 'charset' => 'utf8', 'schemaMap' => [ 'pgsql' => [ 'class' => 'yii\pgsql\Schema', 'defaultSchema' => 'public', // skema lalai PostgreSQL ], ], ];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15Pilih dan ubah suai
config/db.php
mengikut servis pangkalan data anda.Konfigurasi komponen cache dan Redis: Edit fail
config/web.php
di root projek untuk menambah atau mengubah bahagiancomponents
bagi konfigurasi Memcached dan Redis. Port lalai untuk Memcached ialah11211
, Redis ialah6379
.php<?php // ... konfigurasi lain 'components' => [ // ... komponen-konponen lain (request, cache, user, errorHandler, log, urlManager) 'cache' => [ 'class' => 'yii\caching\MemCache', 'servers' => [ [ 'host' => '127.0.0.1', 'port' => 11211, // port lalai Memcached 'weight' => 100, ], ], ], 'redis' => [ 'class' => 'yii\redis\Connection', 'hostname' => '127.0.0.1', 'port' => 6379, // port lalai Redis 'database' => 0, // indeks pangkalan data Redis ], // ... komponen lain ], // ... konfigurasi 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 anda telah mengaktifkan servis Memcached dan Redis dalam ServBay. Untuk menggunakan Redis sebagai cache, pastikan pakej
yiisoft/yii2-redis
telah dipasang (Composer akan memasang keperluan asas, untuk ciri tambahan boleh lakukancomposer require yiisoft/yii2-redis
). Memcached biasanya menggunakanyiisoft/yii2-memcached
— templat asas mungkin telah sediakan kebergantungan ini.
Tetapan Pelayan Web (Laman ServBay)
Gunakan fungsi “Laman Web” ServBay untuk mengkonfigurasi pelayan Web tempatan (Caddy atau Nginx) dan menunjuk ke projek Yii 2 anda.
- Buka aplikasi ServBay: Pastikan aplikasi ServBay berjalan.
- Navigasi ke tetapan laman web: Dalam antara muka ServBay, klik pada "Laman Web" atau bahagian berkaitan.
- Tambah laman baru: Klik butang tambah laman baharu (simbol
+
atauTambah
). - Isi maklumat laman:
- Nama: Masukkan nama yang mudah dikenalpasti, contoh
My First Yii 2 Dev Site
. - Domain: Masukkan domain tempatan untuk pembangunan, contoh
servbay-yii2-test.local
. ServBay akan set DNS untuk domain ini ke127.0.0.1
. - Jenis laman: Pilih
PHP
. - Versi PHP: Pilih versi PHP yang aktif (misal
8.3
). Pastikan versi tersebut telah dipasang dan diaktifkan dalam ServBay. - Direktori root laman: Sangat penting — untuk aplikasi Yii 2 asas, penggunaan
web
sebagai kemasukan utama. Maka, root laman ialah:- macOS:
/Applications/ServBay/www/servbay-yii2-app/web
- Windows:
C:\ServBay\www\servbay-yii2-app\web
- macOS:
- Nama: Masukkan nama yang mudah dikenalpasti, contoh
- Simpan dan terapkan: Simpan tetapan. ServBay akan memuat semula konfigurasi pelayan Web secara automatik.
Rujuk dokumentasi rasmi ServBay untuk langkah terperinci: Menambah Laman Web Pertama.
ServBay akan menyediakan sijil SSL automatik yang boleh dipercayai (melalui ServBay User CA/Pubic CA) supaya anda boleh akses laman anda dengan HTTPS secara tempatan.
Tambah Kod Demonstrasi Fungsi
Untuk mendemonstrasi pangkalan data dan cache, tambah beberapa aksi contoh dalam pengawal lalai Yii 2.
Edit fail controllers/SiteController.php
di root projek dan tambahkan kaedah berikut 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 kelas exception pangkalan data
class SiteController extends Controller
{
/**
* Paparkan laman utama.
*
* @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 saat
if ($cache->set($key, $data, $duration)) {
$value = $cache->get($key);
return $this->asText("Memcached berjaya diset. Nilai yang diambil: " . $value);
} else {
return $this->asText("Gagal menetapkan data dalam Memcached. Sila semak servis 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 berjaya diset. Nilai yang diambil: " . $value);
} else {
return $this->asText("Gagal menetapkan data dalam Redis. Sila semak servis dan konfigurasi Redis.");
}
} catch (\yii\base\Exception $e) {
return $this->asText("Ralat Redis: " . $e->getMessage() . ". Sila periksa servis dan konfigurasi Redis.");
}
}
/**
* Demonstrasi penambahan pengguna ke pangkalan data.
* Asumsi jadual 'users' tersedia.
*
* @return Response
*/
public function actionMysqlAdd() // Boleh juga digunakan untuk PostgreSQL dengan konfigurasi sesuai
{
try {
$count = Yii::$app->db->createCommand()->insert('users', [
'name' => 'Pengguna Demo ServBay', // Nama demo berkaitan jenama
'email' => 'demo-user@servbay.test', // Emel demo berkaitan jenama
])->execute();
return $this->asText("Pengguna berjaya ditambah. Baris terlibat: " . $count);
} catch (DbException $e) {
return $this->asText("Gagal menambah pengguna ke pangkalan data. Ralat: " . $e->getMessage() . ". Sila semak servis pangkalan data, konfigurasi, dan pastikan jadual 'users' wujud.");
}
}
/**
* Demonstrasi mendapatkan pengguna dari pangkalan data.
* Asumsi jadual 'users' tersedia.
*
* @return Response
*/
public function actionMysql() // Boleh guna untuk PostgreSQL juga dengan konfigurasi sesuai
{
try {
$users = Yii::$app->db->createCommand('SELECT id, name, email FROM users')->queryAll();
// Format output agar lebih jelas dan elak dedah data sensitif
$output = "Senarai Pengguna:\n";
foreach ($users as $user) {
$output .= "- ID: {$user['id']}, Nama: {$user['name']}, Emel: {$user['email']}\n";
}
return $this->asText($output);
} catch (DbException $e) {
return $this->asText("Gagal mendapatkan data pengguna. Ralat: " . $e->getMessage() . ". Sila semak servis pangkalan data, konfigurasi, dan pastikan jadual 'users' wujud.");
}
}
// Jika anda menggunakan PostgreSQL, boleh tambah kaedah khusus aksi tetapi lazimnya guna 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
Untuk aksi actionMysqlAdd
dan actionMysql
, pengendalian ralat sudah ditambah dan output diformat supaya mudah dibaca. Nama demo dan emel telah dikemas kini agar serasi dengan branding ServBay.
Sunting fail views/site/index.php
(fail paparan untuk actionIndex
). Anda boleh mengekalkan kandungan lalai atau mengubahnya seperti berikut:
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'; // Kemas kini tajuk
?>
<div class="site-index">
<div class="jumbotron">
<h1>Tahniah!</h1>
<p class="lead">Anda telah berjaya membina aplikasi Yii2 dan mengkonfigurasikannya dengan ServBay!</p>
<p><a class="btn btn-lg btn-success" href="https://www.yiiframework.com">Mulakan dengan Yii</a></p>
</div>
<div class="body-content">
<h2>Demonstrasi</h2>
<ul>
<li><a href="<?= Html::toRoute('site/memcached') ?>">Uji Memcached</a></li>
<li><a href="<?= Html::toRoute('site/redis') ?>">Uji Redis</a></li>
<li><a href="<?= Html::toRoute('site/mysql-add') ?>">Tambah pengguna ke pangkalan data</a> (Perlu jadual 'users')</li>
<li><a href="<?= Html::toRoute('site/mysql') ?>">Dapatkan pengguna dari pangkalan data</a> (Perlu jadual 'users')</li>
</ul>
<p>Sila pastikan servis Memcached, Redis dan pangkalan data pilihan anda (MySQL/PostgreSQL) aktif dalam ServBay serta dikonfigurasi dengan betul di `config/web.php` dan `config/db.php`.</p>
<p>Bagi contoh pangkalan data, anda perlu cipta jadual 'users' menggunakan migrasi Yii (lihat bahagian 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
Tautan demonstrasi telah ditambah ke paparan bagi memudahkan anda menguji aksi yang baru ditambah.
Pangkalan Data Berkaitan: Cipta Struktur Jadual (Migrasi)
Untuk menjalankan demonstrasi pangkalan data (actionMysqlAdd
, actionMysql
), cipta jadual users
menggunakan sistem migrasi Yii.
Bina fail migrasi dengan alat Gii: Di terminal dan root projek, jalankan arahan berikut:
Lokasi root projek:
- macOS:
/Applications/ServBay/www/servbay-yii2-app
- Windows:
C:\ServBay\www\servbay-yii2-app
bashphp yii migrate/create create_users_table
1Masukkan
yes
apabila diminta. Fail migrasi baharu akan dicipta di foldermigrations
dengan nama sepertimYYYYMMDD_HHMMSS_create_users_table.php
.- macOS:
Edit fail migrasi: Sunting kaedah
up()
dalam fail migrasi untuk menentukan struktur jadualusers
.php<?php use yii\db\Migration; /** * Cipta jadual `{{%users}}`. */ class mXXXXXXXXXXXXXX_create_users_table extends Migration // XXXXXXXXXXXXXX ialah timestamp { /** * {@inheritdoc} */ public function up() { $this->createTable('{{%users}}', [ // Guna {{%users}} untuk sokongan prefix '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'), ]); // Pilihan: Cipta index untuk prestasi kueri $this->createIndex( 'idx-users-email', '{{%users}}', 'email', true // true = index unik ); } /** * {@inheritdoc} */ public function down() { // Buang indeks $this->dropIndex( 'idx-users-email', '{{%users}}' ); // Buang jadual $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
46Tukar nama kelas kepada yang sebenar seperti dalam fail anda.
Jalankan migrasi: Kekal di root projek, jalankan perintah berikut untuk membina jadual berdasarkan kaedah
up()
:bashphp yii migrate
1Jawab
yes
bila diminta. Jika berjaya, anda akan nampak mesej bahawa jadual telah dicipta.
Akses Laman Web & Uji Fungsi
Kini, buka pelayar web anda dan lawati domain yang telah anda tetapkan, contohnya https://servbay-yii2-test.local
.
- Pergi ke
https://servbay-yii2-test.local
: Laman selamat datang untuk aplikasi asas Yii 2 dan pautan demonstrasi yang baru ditambah akan dipaparkan. - Klik pada "Uji Memcached" atau lawati
https://servbay-yii2-test.local/index.php?r=site/memcached
: Jika servis Memcached berfungsi dan konfigurasi betul, anda akan nampak teks "Memcached berjaya diset...". - Klik pada "Uji Redis" atau lawati
https://servbay-yii2-test.local/index.php?r=site/redis
: Jika servis Redis berfungsi dan konfigurasi betul, akan keluar teks "Redis berjaya diset...". - Klik pada "Tambah pengguna ke pangkalan data" atau pergi ke
https://servbay-yii2-test.local/index.php?r=site/mysql-add
: Jika pangkalan data berfungsi dan jadualusers
telah dicipta, teks "Pengguna berjaya ditambah..." akan dipaparkan. Setiap lawatan akan cuba tambah pengguna baharu (kecuali medan emel dihantar sebagai unik dan telah wujud). - Klik pada "Dapatkan pengguna dari pangkalan data" atau pergi ke
https://servbay-yii2-test.local/index.php?r=site/mysql
: Pengguna dari jadualusers
akan dipaparkan jika konfigurasi dan servis ok.
Jika ada masalah, semak status servis (PHP, pelayan Web, pangkalan data, Memcached, Redis) dalam ServBay, serta semak fail konfigurasi (config/db.php
, config/web.php
) dan pastikan jadual pangkalan data telah dicipta.
Soalan Lazim (FAQ)
- Kenapa domain tidak boleh diakses atau berlaku ralat sijil SSL? Pastikan domain telah ditambah di tetapan "Laman Web" ServBay dan aplikasi ServBay sedang berjalan. ServBay akan mengkonfigurasi DNS dan sijil SSL secara automatik. Jika terdapat ralat sijil, pastikan anda telah mempercayai ServBay User CA atau ServBay Public CA. Rujuk dokumentasi ServBay untuk langkah terperinci.
- Arahan Composer tidak dapat dijalankan? Pastikan Composer telah diaktifkan dalam ServBay dan anda berada di terminal macOS. Composer terbina dalam ServBay akan tersedia dalam PATH secara automatik.
- Gagal sambung ke pangkalan data? Semak sama ada servis pangkalan data (MySQL/PostgreSQL) aktif. Pastikan nilai
dsn
,username
,password
dalamconfig/db.php
sepadan dengan tetapan ServBay. Pastikan juga pangkalan data sepertiservbay_yii2_app
telah dicipta, boleh semak dengan Adminer dalam ServBay. - Gagal sambung Memcached/Redis? Semak servis Memcached/Redis dalam ServBay serta tetapan
host
danport
(default:127.0.0.1
dan port berkenaan) dalam konfigurasi. - Migrasi pangkalan data (
php yii migrate
) gagal? Pastikan fail konfigurasiconfig/db.php
betul dan servis pangkalan data berjalan serta pangkalan data telah dicipta. - Kenapa aksi
actionMysqlAdd
/actionMysql
beritahu jadual tidak wujud? Anda perlu jalankan migrasiphp yii migrate
untuk cipta jadualusers
. - Bagaimana nak lihat log ralat PHP? ServBay menyatukan semua log termasuk log PHP dan pelayan Web. Anda boleh semak di bahagian "Log" dalam aplikasi ServBay untuk bantu diagnosis masalah.
Kesimpulan
ServBay memudahkan anda menyediakan persekitaran pembangunan tempatan yang lengkap untuk menjalankan projek Yii 2 di macOS dan Windows. Dengan Composer terbina dalam, pengurusan versi PHP, servis pangkalan data dan cache serta konfigurasi laman web yang mudah, proses membangunkan projek Yii 2 anda menjadi lebih efisien dan tersusun. Ikuti panduan ini untuk memulakan perjalanan pembangunan Yii 2 anda dan manfaatkan semua alat yang ServBay sediakan untuk meningkatkan produktiviti.
Selamat membangun!