Cara Membina dan Menjalankan Projek ThinkPHP 8 dengan ServBay
Dokumen ini memandu anda bagaimana menggunakan ServBay, satu persekitaran pembangunan web lokal yang berkuasa, untuk membina, konfigurasi, dan menjalankan projek PHP berasaskan rangka kerja ThinkPHP 8 dengan cepat. ServBay menyediakan persekitaran PHP yang telah dipra-konfigurasi, pelayan web (Caddy atau Nginx) dan pelbagai jenis pangkalan data, sangat memudahkan proses memulakan projek ThinkPHP secara tempatan.
Apakah ThinkPHP?
ThinkPHP ialah rangka kerja pembangunan PHP berorientasikan objek yang bersumber terbuka, pantas, dan ringkas yang bermula dari China. Ia mengikuti prinsip pembangunan yang ringkas serta cekap, bertujuan menyediakan alat mudah kepada pembangun untuk membina aplikasi web moden. ThinkPHP popular dalam komuniti PHP China kerana mudah digunakan, ciri yang meluas (seperti ORM hebat, routing fleksibel, enjin templat terbina dalam, sokongan caching dan sebagainya), serta komuniti aktif yang menyokong rangka kerja ini.
Ciri Utama & Kelebihan ThinkPHP
- Ringkas & Cekap: Rekabentuk yang minimal dan tersusun, mudah difahami serta diselia, meningkatkan kecekapan pembangunan.
- Ciri Menyeluruh: Termasuk komponen penting pembangunan web seperti struktur MVC, ORM, enjin templat, caching, pengurusan sesi, autentikasi, token borang dan lain-lain.
- ORM Hebat: Menyediakan pemetaan objek-ke-relasi yang berkuasa dan mudah digunakan, memudahkan operasi pangkalan data.
- Routing Fleksibel: Menyokong pelbagai definisi routing, sesuai untuk struktur URL yang kompleks.
- Ekosistem Kaya: Penuh dengan perpustakaan dan plugin tambahan, serta komuniti pembangun yang besar dan aktif.
- Sentiasa Dikemas Kini: Versi baharu dikeluarkan dengan pantas, mengikuti perkembangan PHP dan trend pembangunan web.
ThinkPHP sesuai digunakan untuk projek kecil hingga aplikasi perusahaan berskala besar.
Membina Projek ThinkPHP 8 dengan ServBay
ServBay menyediakan persekitaran ideal untuk pembangunan lokal ThinkPHP 8, termasuk:
- Pra-pasang pelbagai versi PHP dan sambungan popular.
- Pelayan web terbina dalam (Caddy atau Nginx) untuk konfigurasi laman web yang mudah.
- Integrasi dengan MySQL, PostgreSQL, MongoDB, Redis, Memcached dan pelbagai lagi perkhidmatan pangkalan data.
- Pengurus kebergantungan Composer sedia terbina.
Panduan ini akan menggunakan ciri-ciri ServBay untuk memulakan projek ThinkPHP 8 anda dengan pantas.
Keperluan Asas
Sebelum bermula, pastikan perkara berikut telah selesai:
- Muat turun dan pasang ServBay pada sistem operasi macOS atau Windows.
- ServBay sedang berjalan, dan versi PHP yang diperlukan (ThinkPHP 8 memerlukan PHP 8.0 atau lebih tinggi) serta perkhidmatan pangkalan data yang berkaitan (MySQL, PostgreSQL, Redis, Memcached dll) telah diaktifkan. Anda boleh semak dan aktifkan melalui tab “Pakej Perisian” dalam panel kawalan ServBay.
Cipta Projek ThinkPHP
ServBay mengesyorkan supaya fail laman web lokal anda disimpan di folder /Applications/ServBay/www
untuk pengurusan lebih baik.
Pastikan Composer Telah Dipasang
ServBay telah menyediakan Composer secara terbina, lazimnya anda tidak perlu memasang secara manual. Anda boleh menyemak versi Composer melalui terminal ServBay dengan arahan
composer --version
.Cipta Projek ThinkPHP Menggunakan Composer
Buka terminal macOS, laksanakan arahan berikut untuk mencipta projek ThinkPHP 8 baru di direktori akar laman web ServBay:
bashcd /Applications/ServBay/www composer create-project topthink/think servbay-thinkphp-app
1
2Ini akan menghasilkan folder
servbay-thinkphp-app
dalam/Applications/ServBay/www
dan memuat turun teras serta kebergantungan ThinkPHP 8.Masuk ke Direktori Projek
Setelah penciptaan selesai, masuk ke direktori projek:
bashcd /Applications/ServBay/www/servbay-thinkphp-app
1
Konfigurasi Asas Projek
Selepas penciptaan projek, lakukan beberapa konfigurasi asas.
Konfigurasi Sambungan Pangkalan Data
Konfigurasi pangkalan data ThinkPHP biasanya di dalam fail
config/database.php
. Ubah fail ini mengikut perkhidmatan pangkalan data yang anda telah aktifkan dalam ServBay.Berikut contoh konfigurasi untuk MySQL default ServBay:
php<?php // config/database.php return [ // Konfigurasi sambungan pangkalan data default 'default' => env('database.driver', 'mysql'), // Semua konfigurasi sambungan pangkalan data 'connections' => [ 'mysql' => [ // Jenis pangkalan data 'type' => 'mysql', // Alamat server 'hostname' => env('database.hostname', '127.0.0.1'), // Nama pangkalan data 'database' => env('database.database', 'servbay_thinkphp_app'), // Cadangkan cipta pangkalan data berasingan untuk projek ini // Nama pengguna 'username' => env('database.username', 'root'), // Kata laluan 'password' => env('database.password', 'password'), // Laluan lalai ServBay, hanya untuk pembangunan lokal! // Port 'hostport' => env('database.hostport', '3306'), // ... konfigurasi lain ... ], // ... konfigurasi pangkalan data 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:
- Tukar nilai
database
kepada nama sebenar pangkalan data yang anda cipta untuk projek ini (contoh: ciptaservbay_thinkphp_app
melalui phpMyAdmin atau Adminer ServBay). - Kata laluan lalai pengguna
root
dalam ServBay ialahpassword
. Kata laluan ini hanya untuk pembangunan tempatan, jangan guna di persekitaran produksi! Pastikan anda guna kata laluan yang kukuh dan pengguna dengan hak minimum di persekitaran produksi. - Jika anda menggunakan fail
.env
untuk pengurusan env, pastikan konfigurasi dalam.env
menimpa nilai default dalamconfig/database.php
.
- Tukar nilai
Konfigurasi Pelayan Web
Fail masuk utama rangka kerja ThinkPHP ialah public/index.php
dan ia perlukan peraturan Rewrite URL untuk routing. Memandangkan routing ThinkPHP berbeza daripada akses terus ke fail statik, anda perlu menggunakan peraturan Rewrite bawaan ServBay.
Dalam menu aturan tapisan laman web, pilih ThinkPHP
pada senarai peraturan Rewrite dan tekan simpan.
Langkah konfigurasi laman web ServBay yang terperinci boleh dirujuk di Tambah Laman Web Pertama.
Tambah Kod Contoh
Untuk menguji konfigurasi dan fungsi asas ThinkPHP, tambahkan satu routing dan pengawal mudah dalam projek anda.
Edit fail /Applications/ServBay/www/servbay-thinkphp-app/route/app.php
, dan tambahkan kod berikut untuk routing GET asas:
php
<?php
// route/app.php
use think\facade\Route;
// Definisikan routing servbay; bila akses /servbay, laksanakan fungsi tanpa nama
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
Selepas langkah di atas, buka pelayar web anda dan lawati domain lokal yang telah dikonfigurasi serta URL routing contoh:
https://thinkphp.servbay.demo/servbay
Jika konfigurasi betul, anda akan lihat output Hello ServBay!
dalam pelayar. Ini bermakna projek ThinkPHP 8 anda telah berjaya dijalankan dalam persekitaran ServBay, dan pelayan web serta PHP-FPM telah berfungsi.
Contoh Pangkalan Data NoSQL
ServBay telah pra-pasang beberapa pangkalan data NoSQL, seperti Memcached dan Redis. ThinkPHP menyediakan lapisan cache abstrak yang mudah untuk integrasi sebagai pemacu cache.
Contoh Memcached
Pasang Sambungan Memcached
Extension Memcached telah dipasang dalam pakej PHP ServBay. Cuma pastikan perkhidmatan Memcached diaktifkan melalui panel kawalan ServBay.
Konfigurasi Cache Memcached
Edit fail
config/cache.php
untuk jadikan Memcached sebagai pemacu cache:php<?php // config/cache.php return [ // Pemacu cache default 'default' => env('cache.driver', 'memcached'), // Konfigurasi sambungan cache 'stores' => [ 'memcached' => [ // Jenis cache 'type' => 'memcached', // Senarai server 'host' => '127.0.0.1', // Alamat default Memcached ServBay 'port' => 11211, // Port default 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 controller atau callback routing anda, gunakan
Cache
Facade ThinkPHP untuk operasi Memcached:php<?php use think\facade\Cache; use think\facade\Route; Route::get('/memcached-example', function () { // Simpan dalam cache selama 600 saat Cache::set('my_memcached_key', 'This value is from Memcached!', 600); // Ambil dari 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 Sambungan Redis
Extension Redis telah dipasang dalam pakej PHP ServBay. Cuma pastikan perkhidmatan Redis diaktifkan melalui panel kawalan ServBay.
Konfigurasi Cache Redis
Edit fail
config/cache.php
untuk jadikan Redis sebagai pemacu cache:php<?php // config/cache.php return [ // Pemacu cache default '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 default Redis ServBay // Port 'port' => env('cache.port', 6379), // Port default Redis ServBay // Kata laluan (default tiada bagi ServBay) 'password' => env('cache.password', ''), // ServBay tiada kata laluan Redis 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: Pemasangan Redis ServBay tidak menggunakan kata laluan secara lalai. Jika anda telah tetapkan kata laluan, ubah nilai pada medan
password
.Guna Cache Redis dalam Kod
Dalam controller atau callback routing anda, gunakan
Cache
Facade ThinkPHP untuk operasi Redis:php<?php use think\facade\Cache; use think\facade\Route; Route::get('/redis-example', function () { // Simpan cache, sentiasa sah (atau set tempoh melalui parameter ketiga) Cache::set('my_redis_key', 'Hello from Redis!'); // Ambil dari 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 mengintegrasikan pangkalan data utama seperti MySQL dan PostgreSQL. ORM ThinkPHP amat memudahkan interaksi dengan pangkalan data relasi.
Guna Alat Migrasi Pangkalan Data ThinkPHP
Dalam ThinkPHP, migrasi pangkalan data digunakan untuk mengurus perubahan struktur pangkalan data dan membantu kawalan versi serta kerjasama kumpulan.
Pasang Alat Migrasi
Dari direktori utama projek, gunakan Composer untuk pasang sambungan migrasi ThinkPHP:
bashcd /Applications/ServBay/www/servbay-thinkphp-app composer require topthink/think-migration
1
2Cipta Fail Migrasi
Guna CLI ThinkPHP untuk cipta fail migrasi baharu, sebagai contoh untuk jadual
users
:bashphp think migrate:create CreateUserTable
1Fail akan dicipta di direktori
database/migrations
, nama mengandungi cap masa dan nama yang anda tetapkan (cth:20231027100000_create_user_table.php
).Edit Fail Migrasi
Buka fail baharu dalam
database/migrations
dan edit kaedahup()
untuk mendefinisikan 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 boleh diterbalikkan di sini. * * Maklumat lanjut: http://docs.phinx.org/en/latest/migrations.html#the-change-method * * Fungsi berikut akan diterbalikkan automatik oleh Phinx ketika rollback: * * createTable * renameTable * addColumn * addCustomColumn * renameColumn * addIndex * addForeignKey * createDatabase * renameDatabase * dropTable * dropColumn * dropIndex * dropForeignKey */ public function change() { // Cipta jadual dengan 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]) // Tambah indeks unik ->addTimestamps() // Tambah medan created_at & updated_at ->create(); // Laksanakan ciptaan } // Jika tidak guna metod change, boleh juga definisi up() dan down() secara berasingan /* 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
60Jalankan Migrasi ke Pangkalan Data
Dalam terminal ServBay, pastikan anda berada di direktori akar projek, kemudian jalankan migrasi:
bashphp think migrate:run
1Jika berjaya, jadual
users
akan tercipta dalam pangkalan data anda.
Contoh MySQL
Anggap perkhidmatan MySQL telah diaktifkan di ServBay dan maklumat sambungan telah dikonfigurasi (rujuk bahagian "Konfigurasi Asas Projek").
Konfigurasi Sambungan MySQL
Rujuk contoh konfigurasi MySQL dalam seksyen sebelumnya untuk pastikan info sambungan dalam
config/database.php
tepat.Tambah Data Pengguna melalui Kod
Guna
Db
Facade atau model ORM ThinkPHP untuk masukkan data. Berikut contoh gunaDb
Facade: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' => 'demo@servbay.demo', // Guna emel contoh jenama 'created_at' => date('Y-m-d H:i:s'), // Isi masa jika addTimestamps() tidak auto '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 uji masukkan data.Baca Data Pengguna dari Kod
Guna
Db
Facade atau model ORM untuk mengambil data:php<?php use think\facade\Db; use think\facade\Route; Route::get('/mysql-users', function () { $users = Db::table('users')->select(); // Ambil semua data pengguna return json($users); // Hantar keputusan dalam format JSON });
1
2
3
4
5
6
7
8Lawati
https://thinkphp.servbay.demo/mysql-users
untuk paparan data jadualusers
.
Contoh PostgreSQL
Anggap perkhidmatan PostgreSQL telah diaktifkan di ServBay dan maklumat sambungan telah dikonfigurasi.
Konfigurasi Sambungan PostgreSQL
Dalam fail
config/database.php
, pastikan konfigurasi PostgreSQL adalah seperti berikut (atau disesuaikan mengikut tetapan anda):php<?php // config/database.php (sebahagian) return [ // ... konfigurasi lain ... 'connections' => [ // ... konfigurasi MySQL ... 'pgsql' => [ // Jenis pangkalan data 'type' => 'pgsql', // Alamat server 'hostname' => env('database.hostname', '127.0.0.1'), // Nama pangkalan data 'database' => env('database.database', 'servbay_thinkphp_app'), // Disaran cipta pangkalan data berasingan // Nama pengguna 'username' => env('database.username', 'root'), // Kata laluan 'password' => env('database.password', 'password'), // Kata laluan lalai ServBay, hanya untuk lokal! // Port 'hostport' => env('database.hostport', '5432'), // Port default PostgreSQL // ... konfigurasi lain ... ], // ... konfigurasi pangkalan data 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 PostgreSQL khusus untuk projek anda dan tetapkan dalam konfigurasi.
- Kata laluan lalai pengguna
root
untuk PostgreSQL ialahpassword
. Hanya untuk pembangunan tempatan.
Tambah Data Pengguna melalui Kod
Guna
Db
Facade atau ORM, dan tentukan 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' => 'pgsql-demo@servbay.demo', // Emel contoh jenama // Masa mungkin perlu manual bergantung pada definisi migrasi dan versi 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 menguji.Baca Data Pengguna dari Kod
Guna
Db
Facade atau ORM, tentukan sambunganpgsql
untuk mengambil data:php<?php use think\facade\Db; use think\facade\Route; Route::get('/pgsql-users', function () { $users = Db::connect('pgsql')->table('users')->select(); // Ambil data pengguna guna sambungan pgsql return json($users); // Hantar keputusan dalam format JSON });
1
2
3
4
5
6
7
8Lawati
https://thinkphp.servbay.demo/pgsql-users
untuk paparan data PostgreSQL.
Kesimpulan
Anda telah berjaya membina, konfigurasi, dan menjalankan projek ThinkPHP 8 menggunakan persekitaran pembangunan lokal ServBay. Anda juga telah belajar cara menggunakan Composer untuk cipta projek, tetapan pelayan web Caddy bagi routing ThinkPHP, serta integrasi ServBay dengan MySQL, PostgreSQL, Memcached dan Redis.
ServBay sangat memudahkan proses pembangunan rangka kerja PHP seperti ThinkPHP secara lokal, membolehkan anda fokus pada logik perniagaan. Kini anda boleh terus membangunkan aplikasi ThinkPHP anda dan memanfaatkan pelbagai pakej serta fungsi ServBay.