Cara Mencipta & Menjalankan Projek ThinkPHP 8 dalam ServBay
Panduan ini akan membantu anda menggunakan ServBay, sebuah persekitaran pembangunan web tempatan yang berkuasa, untuk membina, mengkonfigurasi dan menjalankan projek PHP berasaskan rangka kerja ThinkPHP 8 dengan sangat pantas. ServBay membekalkan persekitaran PHP sedia guna, pelayan web (Caddy atau Nginx), serta sokongan pelbagai pangkalan data yang sangat memudahkan proses penubuhan projek ThinkPHP di persekitaran tempatan.
Apa itu ThinkPHP?
ThinkPHP ialah rangka kerja pembangunan PHP sumber terbuka, berorientasikan objek, ringkas dan pantas yang berasal dari China. Ia menitikberatkan prinsip pembangunan yang jelas dan cekap, dengan misi menyediakan set alat mesra pembangun untuk membina aplikasi web moden. Dengan kemudahan penggunaan, ciri meluas (seperti ORM berkuasa, sistem routing fleksibel, enjin templat terbina, caching, dan banyak lagi) serta komuniti yang aktif, ThinkPHP sangat banyak digunakan oleh pembangun PHP di China.
Ciri & Kelebihan Utama ThinkPHP
- Ringkas & Cekap: Reka bentuk rangka kerja ringkas, struktur kod yang mudah difahami serta penyelenggaraan mudah, sekaligus meningkatkan produktiviti pembangunan.
- Fungsi Lengkap: Mengandungi pelbagai komponen pembangunan web terpenting seperti MVC, ORM, enjin templat, caching, pengurusan sesi, pengesahan akses, token borang, dan lain-lain.
- ORM Berkuasa: Menyediakan pemetaan objek-relasi berkuasa yang memudahkan operasi ke atas pangkalan data.
- Routing Fleksibel: Menyokong pelbagai cara definisi routing sesuai untuk struktur URL yang kompleks.
- Ekosistem Kaya: Terdapat banyak perpustakaan dan pemalam tambahan serta komuniti pembangun yang sangat besar dan aktif.
- Kemas Kini Berterusan: Pelepasan versi baharu dengan pantas, seiring dengan perkembangan PHP dan trend pembangunan web.
ThinkPHP sesuai untuk pembangunan aplikasi web pelbagai skala, dari projek kecil hingga aplikasi perusahaan besar.
Membina Projek ThinkPHP 8 dengan ServBay
ServBay ialah persekitaran yang ideal untuk pembangunan tempatan projek ThinkPHP 8, menawarkan:
- PHP siap pasang dengan pelbagai versi dan sambungan yang sering digunakan.
- Pelayan web terbina (Caddy atau Nginx) untuk memudahkan pengurusan laman web.
- Servis pangkalan data terintegrasi: MySQL, PostgreSQL, MongoDB, Redis, Memcached dan lain-lain.
- Composer pengurusan kebergantungan terbina dalam.
Panduan ini menggunakan semua kemudahan ini untuk anda membina projek ThinkPHP 8 dengan lebih pantas.
Pra-syarat
Sebelum bermula, pastikan anda sudah:
- Muat turun & pasang ServBay pada macOS.
- ServBay telah berjalan, versi PHP yang diperlukan (ThinkPHP 8 memerlukan PHP 8.0 atau lebih baharu) serta servis pangkalan data berkaitan (seperti MySQL, PostgreSQL, Redis, Memcached dll) sudah diaktifkan. Anda boleh semak dan hidupkan servis ini dalam tab “Perisian” pada panel kawalan ServBay.
Mencipta Projek ThinkPHP
ServBay mengesyorkan semua fail laman web tempatan anda diletakkan dalam direktori /Applications/ServBay/www
untuk memudahkan pengurusan.
Pastikan Composer terpasang
ServBay telah memasang Composer secara automatik, jadi anda tidak perlu pemasangan tambahan. Sahkah pemasangan dengan menjalankan
composer --version
pada terminal ServBay.Cipta projek ThinkPHP baharu menggunakan Composer
Buka terminal macOS dan jalankan arahan berikut di direktori root laman ServBay untuk cipta projek ThinkPHP 8 baharu:
bashcd /Applications/ServBay/www composer create-project topthink/think servbay-thinkphp-app
1
2Ini akan mencipta folder baharu bernama
servbay-thinkphp-app
dalam/Applications/ServBay/www
dan memuat turun semua fail teras dan kebergantungan ThinkPHP 8.Masuk ke direktori projek
Selepas selesai, masuki direktori projek:
bashcd /Applications/ServBay/www/servbay-thinkphp-app
1
Inisialisasi Konfigurasi Projek
Selesai mencipta projek, lakukan konfigurasi asas berikut.
Tetapkan maklumat sambungan pangkalan data
Konfigurasi pangkalan data ThinkPHP biasanya berada dalam
config/database.php
. Ubah fail ini mengikut maklumat sambungan servis pangkalan data yang telah diaktifkan dalam ServBay.Contoh konfigurasi untuk menggunakan MySQL lalai dari ServBay:
php<?php // config/database.php return [ // Konfigurasi sambungan pangkalan data lalai 'default' => env('database.driver', 'mysql'), // Konfigurasi sambungan pangkalan data 'connections' => [ 'mysql' => [ // Jenis pangkalan data 'type' => 'mysql', // Alamat pelayan 'hostname' => env('database.hostname', '127.0.0.1'), // Nama pangkalan data 'database' => env('database.database', 'servbay_thinkphp_app'), // Sebaiknya cipta DB khusus untuk projek // Nama pengguna 'username' => env('database.username', 'root'), // Kata laluan 'password' => env('database.password', 'password'), // Kata laluan lalai ServBay, hanya untuk pembangunan tempatan! // Port 'hostport' => env('database.hostport', '3306'), // ... konfigurasi lain ... ], // ... konfigurasi sambungan 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
27Penting:
- Tukarkan nilai
database
kepada nama pangkalan data sebenar yang anda cipta (contoh: cipta DB baruservbay_thinkphp_app
melalui phpMyAdmin atau Adminer ServBay). - Kata laluan lalai pengguna
root
dalam ServBay ialahpassword
. Guna hanya untuk pembangunan tempatan, jangan guna di persekitaran produksi! Pastikan gunakan kata laluan kukuh dan akaun minimum privilege untuk produksi. - Jika anda mengatur pembolehubah dalam fail
.env
, pastikan konfigurasi dalam.env
menimpa nilai lalai dalamconfig/database.php
.
- Tukarkan nilai
Konfigurasi Pelayan Web
Fail entri untuk ThinkPHP ialah public/index.php
dan ia bergantung kepada peraturan URL rewrite bagi sistem routing. Memandangkan routing ThinkPHP berbeza dari routing statik biasa, kita perlu guna peraturan Rewrite sedia ada dari ServBay.
Pada antaramuka tetapan laman ServBay, pilih ThinkPHP
di menu lungsur peraturan Rewrite dan klik Simpan.
Untuk langkah konfigurasi laman ServBay yang lebih terperinci, lihat Menambah Laman Web Pertama.
Tambah Kod Contoh
Untuk uji konfigurasi laman dan fungsi asas routing ThinkPHP, tambah satu routing dan pengawal ringkas.
Edit fail /Applications/ServBay/www/servbay-thinkphp-app/route/app.php
projek anda dan tambah kod berikut untuk mendefinisikan routing GET ringkas:
php
<?php
// route/app.php
use think\facade\Route;
// Definisikan routing servbay, akses /servbay jalankan fungsi ini
Route::get('servbay', function () {
return 'Hello ServBay!';
});
// ... routing lain ...
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
Akses Laman Web
Setelah semua langkah di atas selesai, buka pelayar web anda dan lawati nama domain tempatan serta URL routing contoh:
https://thinkphp.servbay.demo/servbay
Jika segala konfigurasi betul, anda akan lihat output Hello ServBay!
di pelayar, bermakna projek ThinkPHP 8 anda telah berjaya dijalankan melalui persekitaran ServBay dan konfigurasi pelayan web serta PHP-FPM telah berfungsi.
Contoh Pangkalan Data NoSQL
ServBay membekalkan beberapa jenis pangkalan data NoSQL seperti Memcached dan Redis. ThinkPHP pula menyediakan lapisan abstraksi cache untuk integrasi mudah dengan servis NoSQL ini sebagai pemandu cache.
Contoh Memcached
Pasang ekstensi Memcached
Ekstensi Memcached telah dipasang bersama pakej PHP dalam ServBay. Cuma pastikan servis Memcached telah diaktifkan di tab “Perisian” panel kawalan ServBay.
Konfigurasi cache Memcached
Edit fail
config/cache.php
supaya ThinkPHP guna Memcached sebagai pemandu cache:php<?php // config/cache.php return [ // Pemandu cache lalai 'default' => env('cache.driver', 'memcached'), // Konfigurasi sambungan cache 'stores' => [ 'memcached' => [ // Jenis cache 'type' => 'memcached', // Senarai pelayan 'host' => '127.0.0.1', // Alamat lalai Memcached ServBay 'port' => 11211, // Port lalai Memcached ServBay 'persistent' => false, 'expire' => 0, 'timeout' => 0, 'prefix' => '', ], // ... konfigurasi cache lain ... ], ];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23Guna cache Memcached dalam kod
Dalam pengawal atau callback routing anda, gunakan Facade ThinkPHP
Cache
untuk operasi cache Memcached:php<?php use think\facade\Cache; use think\facade\Route; Route::get('/memcached-example', function () { // Tetapkan cache, sah untuk 600 saat Cache::set('my_memcached_key', 'This value is from Memcached!', 600); // Ambil cache $value = Cache::get('my_memcached_key'); return 'Value from Memcached: ' . $value; });
1
2
3
4
5
6
7
8
9
10
11
12
13Lawati
https://thinkphp.servbay.demo/memcached-example
untuk menguji.
Contoh Redis
Pasang ekstensi Redis
Ekstensi Redis juga telah disertakan dalam pakej PHP ServBay. Hanya pastikan servis Redis telah aktif di tab “Perisian” pada panel kawalan ServBay.
Konfigurasi cache Redis
Edit fail
config/cache.php
untuk menggunakan Redis sebagai pemandu cache:php<?php // config/cache.php return [ // Pemandu cache lalai 'default' => env('cache.driver', 'redis'), // Konfigurasi sambungan cache 'stores' => [ 'redis' => [ // Jenis cache 'type' => 'redis', // Alamat pelayan 'host' => env('cache.host', '127.0.0.1'), // Alamat lalai Redis ServBay // Port 'port' => env('cache.port', 6379), // Port lalai Redis ServBay // Kata laluan (Redis ServBay tiada kata laluan secara lalai) 'password' => env('cache.password', ''), // ServBay Redis tiada password secara default 'select' => 0, 'timeout' => 0, 'expire' => 0, 'persistent' => false, 'prefix' => '', ], // ... konfigurasi cache 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
27Nota: Redis dalam pemasangan ServBay tiada kata laluan secara default. Jika anda setkan kata laluan, sila kemaskini medan
password
di sini.Guna cache Redis dalam kod
Dalam pengawal atau callback routing, gunakan Facade ThinkPHP
Cache
untuk operasi Redis:php<?php use think\facade\Cache; use think\facade\Route; Route::get('/redis-example', function () { // Tetapkan cache, kekal (atau tetapkan tempoh sah melalui parameter ketiga) Cache::set('my_redis_key', 'Hello from Redis!'); // Ambil cache $value = Cache::get('my_redis_key'); return 'Value from Redis: ' . $value; });
1
2
3
4
5
6
7
8
9
10
11
12
13Lawati
https://thinkphp.servbay.demo/redis-example
untuk menguji.
Contoh Pangkalan Data Relasi
ServBay turut integrasi pangkalan data relasi utama seperti MySQL dan PostgreSQL. ORM ThinkPHP memudahkan anda berinteraksi dengan pangkalan data-pangkalan data ini.
Gunakan Peralatan Migrasi Pangkalan Data ThinkPHP
Dalam ThinkPHP, alat migrasi digunakan untuk mengurus perubahan struktur pangkalan data, sangat memudahkan kerjasama dan kawalan versi.
Pasang alat migrasi pangkalan data
Dari root projek, gunakan Composer untuk pasang ekstensi migrasi ThinkPHP:
bashcd /Applications/ServBay/www/servbay-thinkphp-app composer require topthink/think-migration
1
2Cipta fail migrasi
Guna CLI ThinkPHP untuk jana fail migrasi baharu. Contohnya, mencipta migrasi untuk jadual
users
:bashphp think migrate:create CreateUserTable
1Fail baharu akan dijana dalam
database/migrations
, dengan nama mengandungi cap waktu (cth:20231027100000_create_user_table.php
).Edit fail migrasi
Buka fail migrasi baru tersebut, edit kaedah
up()
untuk definisi struktur jadualusers
:php<?php // database/migrations/YYYYMMDDHHMMSS_create_user_table.php use think\migration\Migrator; use think\migration\db\Column; class CreateUserTable extends Migrator { /** * Change Method. * * Tulis migrasi mudah-balik anda di sini. * * Maklumat lanjut di: http://docs.phinx.org/en/latest/migrations.html#the-change-method * * Anda boleh gunakan arahan berikut yang akan automatik terbalik bila rollback: * * createTable * renameTable * addColumn * addCustomColumn * renameColumn * addIndex * addForeignKey * createDatabase * renameDatabase * dropTable * dropColumn * dropIndex * dropForeignKey */ public function change() { // Cipta jadual dengan kaedah createTable $table = $this->table('users'); $table->addColumn('name', 'string', ['limit' => 50, 'comment' => 'Nama pengguna']) ->addColumn('email', 'string', ['limit' => 100, 'comment' => 'Alamat emel']) ->addIndex(['email'], ['unique' => true]) // Indeks unik ->addTimestamps() // Tambah medan created_at dan updated_at ->create(); // Laksanakan ciptaan jadual } // Jika tidak menggunakan kaedah change, boleh juga definisi up() dan down() /* public function up() { $table = $this->table('users'); $table->addColumn('name', 'string', ['limit' => 50, 'comment' => 'Nama pengguna']) ->addColumn('email', 'string', ['limit' => 100, 'comment' => 'Alamat emel']) ->addIndex(['email'], ['unique' => true]) ->addTimestamps() ->create(); } public function down() { $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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60Laksanakan migrasi pangkalan data
Pada terminal ServBay, pastikan anda berada pada root projek, kemudian jalankan perintah berikut untuk cipta jadual
users
:bashphp think migrate:run
1Jika berjaya, jadual
users
baru akan muncul dalam pangkalan data anda.
Contoh MySQL
Asumsikan servis MySQL ServBay telah berjalan dan konfigurasi sambungan MySQL (config/database.php
) telah selesai.
Konfigurasi sambungan MySQL
Rujuk contoh konfigurasi MySQL di bahagian “Inisialisasi Konfigurasi Projek” sebentar tadi dan pastikan maklumat sambungan tepat.
Tulis data pengguna ke dalam kod
Gunakan Facade
Db
ThinkPHP atau model ORM untuk masukkan data. Contoh menggunakan FacadeDb
:php<?php use think\facade\Db; use think\facade\Route; Route::get('/mysql-add-user', function () { try { Db::table('users')->insert([ 'name' => 'ServBay Demo User', 'email' => '[email protected]', // Emel brand contoh 'created_at' => date('Y-m-d H:i:s'), // Tambah cap waktu, jika addTimestamps() tidak autolengkap 'updated_at' => date('Y-m-d H:i:s'), ]); return 'User added successfully!'; } catch (\Exception $e) { return 'Error adding user: ' . $e->getMessage(); } });
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17Lawati
https://thinkphp.servbay.demo/mysql-add-user
untuk menguji masukkan data.Baca data pengguna dari kod
Guna Facade
Db
atau model ORM untuk kueri data:php<?php use think\facade\Db; use think\facade\Route; Route::get('/mysql-users', function () { $users = Db::table('users')->select(); // Ambil semua data user return json($users); // Papar dalam format JSON });
1
2
3
4
5
6
7
8Lawati
https://thinkphp.servbay.demo/mysql-users
untuk lihat data jadualusers
.
Contoh PostgreSQL
Asumsikan servis PostgreSQL ServBay telah aktif dan konfigurasi sambungan PostgreSQL telah selesai.
Konfigurasi sambungan PostgreSQL
Dalam
config/database.php
, pastikan ada konfigurasi sambungan seperti berikut (atau ubah mengikut keperluan):php<?php // config/database.php (sebahagian) return [ // ... konfigurasi lain ... 'connections' => [ // ... konfigurasi MySQL ... 'pgsql' => [ // Jenis Pangkalan Data 'type' => 'pgsql', // Alamat pelayan 'hostname' => env('database.hostname', '127.0.0.1'), // Nama DB 'database' => env('database.database', 'servbay_thinkphp_app'), // Sebaiknya cipta DB khusus untuk projek // Nama pengguna 'username' => env('database.username', 'root'), // Kata laluan 'password' => env('database.password', 'password'), // Kata laluan lalai ServBay, hanya untuk pembangunan! // Port 'hostport' => env('database.hostport', '5432'), // Port lalai PostgreSQL // ... lain-lain ... ], // ... konfigurasi sambungan 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
27Penting:
- Seperti MySQL, cipta pangkalan data khusus untuk projek, dan nyatakan dalam konfigurasi.
- Kata laluan lalai
root
untuk PostgreSQL dalam ServBay ialahpassword
, guna hanya untuk pembangunan tempatan.
Tulis data pengguna dalam kod
Gunakan Facade
Db
atau model ORM untuk masukkan data, spesifikkan kepada sambunganpgsql
:php<?php use think\facade\Db; use think\facade\Route; Route::get('/pgsql-add-user', function () { try { Db::connect('pgsql')->table('users')->insert([ // Guna sambungan pgsql 'name' => 'ServBay PgSQL User', 'email' => '[email protected]', // Emel brand contoh // Kerap perlu tambah cap waktu secara manual, bergantung spesifikasi migrasi/ThinkPHP 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s'), ]); return 'PostgreSQL User added successfully!'; } catch (\Exception $e) { return 'Error adding PostgreSQL user: ' . $e->getMessage(); } });
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18Lawati
https://thinkphp.servbay.demo/pgsql-add-user
untuk uji masukan data.Baca data pengguna dalam kod
Guna Facade
Db
atau model ORM dan pilih sambunganpgsql
:php<?php use think\facade\Db; use think\facade\Route; Route::get('/pgsql-users', function () { $users = Db::connect('pgsql')->table('users')->select(); // Ambil data guna sambungan pgsql return json($users); // Papar hasil sebagai JSON });
1
2
3
4
5
6
7
8Lawati
https://thinkphp.servbay.demo/pgsql-users
untuk lihat data pengguna dari PostgreSQL.
Ringkasan
Selepas mengikuti langkah-langkah di atas, anda telah berjaya mencipta, mengkonfigurasi dan menjalankan projek ThinkPHP 8 sepenuhnya dalam persekitaran pembangunan tempatan ServBay. Anda juga telah mempelajari bagaimana menggunakan Composer terbina untuk mencipta projek, konfigurasi pelayan web Caddy untuk routing ThinkPHP, serta cara sambung dan guna servis pangkalan data seperti MySQL, PostgreSQL, Memcached dan Redis yang tersedia dalam ServBay.
ServBay sangat memudahkan proses membina persekitaran pembangunan tempatan untuk rangka kerja PHP seperti ThinkPHP, membolehkan anda fokus kepada pembangunan logik perniagaan. Kini anda boleh terus membangunkan aplikasi ThinkPHP anda dengan memanfaatkan sepenuhnya semua perisian dan ciri dari ServBay.