在 ServBay 中建立並運行 ThinkPHP 8 專案
本文將指引您如何使用 ServBay 這個強大的本地 Web 開發環境,快速建立、設定並運行基於 ThinkPHP 8 框架的 PHP 專案。ServBay 提供預先設定好的 PHP 環境、Web 伺服器(Caddy 或 Nginx)與多種資料庫,大幅簡化 ThinkPHP 專案的本機部署流程。
什麼是 ThinkPHP?
ThinkPHP 是一套源自中國的開源、快速、簡潔的物件導向 PHP 開發框架。它採用簡單高效的開發原則,旨在為開發者提供一整套便利工具,協助建構現代化 Web 應用。憑藉易於上手、豐富功能(如強大的 ORM、靈活路由、內建模板引擎、快取支持等)以及活躍的社群,ThinkPHP 在中國 PHP 開發領域擁有廣泛應用基礎。
ThinkPHP 的主要特性與優勢
- 簡潔高效: 框架設計簡明,程式結構清晰,易於維護,提升開發效率。
- 功能完整: 內建許多常用 Web 開發組件,如 MVC 架構、ORM、模板引擎、快取、Session 管理、權限驗證、表單 Token 等。
- 強大 ORM: 提供直覺且強大的物件關聯映射,大幅簡化資料庫操作。
- 靈活路由: 多種路由定義方式,能應對複雜 URL 結構需求。
- 豐富生態: 擁有大量擴充套件與外掛,以及規模龐大且活躍的開發社群,資源豐富。
- 持續更新: 框架版本更新快速,與 PHP 語言及 Web 技術發展持續同步。
ThinkPHP 適用於從小型到企業級多種規模的 Web 開發需求。
使用 ServBay 部署 ThinkPHP 8 專案
ServBay 為 ThinkPHP 8 專案本機開發提供理想環境,包括:
- 預先安裝多版本 PHP 及常見擴充套件。
- 內建 Web 伺服器(Caddy 或 Nginx),輕鬆設定多個網站。
- 整合 MySQL、PostgreSQL、MongoDB、Redis、Memcached 等多種資料庫服務。
- 內建 Composer 相依管理器。
本指南將善用 ServBay 這些功能,迅速搭建您的 ThinkPHP 8 專案。
前置條件
開始前,請確保完成下列準備:
- 已於 macOS 系統下載並安裝 ServBay。
- ServBay 正在執行,且所需 PHP 版本(ThinkPHP 8 需 PHP 8.0 或以上)及相關資料庫服務(如 MySQL、PostgreSQL、Redis、Memcached 等)已啟動。您可在 ServBay 控制面板「軟體包」分頁檢查並啟動這些服務。
建立 ThinkPHP 專案
ServBay 建議您的網站檔案統一儲存於 /Applications/ServBay/www
資料夾下,便於集中管理本機網站。
確認 Composer 已安裝
ServBay 安裝時已預載 Composer,通常無需另行安裝。您可於 ServBay 終端執行
composer --version
驗證。使用 Composer 建立 ThinkPHP 專案
開啟 macOS 終端機,於 ServBay 網站根目錄下執行以下命令建立全新 ThinkPHP 8 專案:
bashcd /Applications/ServBay/www composer create-project topthink/think servbay-thinkphp-app
1
2這會於
/Applications/ServBay/www
目錄下建立一個名為servbay-thinkphp-app
的資料夾,並下載 ThinkPHP 8 核心檔與相依套件。進入專案目錄
專案建立後,進入專案資料夾:
bashcd /Applications/ServBay/www/servbay-thinkphp-app
1
初始化專案設定
建立新專案後,需進行基本設定。
設定資料庫連線資訊
ThinkPHP 的資料庫設定通常位於
config/database.php
。請根據您已啟動的 ServBay 資料庫服務,調整此檔案以正確連線。以下為使用 ServBay 預設 MySQL 服務的設定範例:
php<?php // config/database.php return [ // 預設使用的資料庫連線設定 'default' => env('database.driver', 'mysql'), // 各資料庫連線設定 'connections' => [ 'mysql' => [ // 資料庫型態 'type' => 'mysql', // 伺服器位址 'hostname' => env('database.hostname', '127.0.0.1'), // 資料庫名稱 'database' => env('database.database', 'servbay_thinkphp_app'), // 建議為專案建立獨立資料庫 // 使用者名稱 'username' => env('database.username', 'root'), // 密碼 'password' => env('database.password', 'password'), // ServBay 預設密碼,僅限本機開發使用! // 連接埠 'hostport' => env('database.hostport', '3306'), // ... 其他設定 ... ], // ... 其他資料庫設定 ... ], ];
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重要提醒:
- 請將
database
的值改為您為本專案建立的實際資料庫名稱(例如,可於 ServBay 的 phpMyAdmin 或 Adminer 建立servbay_thinkphp_app
資料庫)。 - ServBay 預設
root
用戶密碼為password
。此密碼僅供本地開發,請勿用於生產環境! 生產環境務必使用高強度密碼,並建立權限最小化的專用用戶。 - 若使用
.env
檔管理環境變數,請確保.env
內容可正確覆蓋config/database.php
預設值。
- 請將
設定 Web 伺服器
ThinkPHP 框架入口在 public/index.php
,並依賴 URL 重寫(Rewrite)處理路由。由於框架路由機制不同於常規靜態檔案直達模式,因此必須使用 ServBay 內建 Rewrite 規則。
請於網站設定介面的 Rewrite 下拉選單內選擇 ThinkPHP
,點選儲存。
更多網站設定細節請參考 新增第一個網站。
新增範例程式碼
為測試網站設定與 ThinkPHP 基本路由是否正常運作,請在專案中新增一個簡單路由與控制器。
編輯 /Applications/ServBay/www/servbay-thinkphp-app/route/app.php
檔案,新增下列定義簡單 GET 路由的程式:
<?php
// route/app.php
use think\facade\Route;
// 定義 servbay 路由,存取 /servbay 時執行匿名函式
Route::get('servbay', function () {
return 'Hello ServBay!';
});
// ... 其他路由 ...
2
3
4
5
6
7
8
9
10
11
存取網站
完成上述步驟後,開啟瀏覽器並輸入您的本地域名及範例路由對應網址:
https://thinkphp.servbay.demo/servbay
若一切設定正確,瀏覽器將顯示 Hello ServBay!
,表示 ThinkPHP 8 專案已於 ServBay 環境下成功運作,且 Web 伺服器與 PHP-FPM 配置皆已生效。
NoSQL 資料庫範例
ServBay 預設整合多種 NoSQL 資料庫,如 Memcached 與 Redis。ThinkPHP 提供簡潔的快取抽象層,讓這些 NoSQL 服務輕鬆作為快取驅動整合到框架中。
Memcached 範例
安裝 Memcached 擴充套件
ServBay PHP 軟體包已預載 Memcached 擴充套件。您只需於「軟體包」標籤下確認 Memcached 服務已啟動。
設定 Memcached 快取
編輯
config/cache.php
檔,讓 ThinkPHP 使用 Memcached 作為快取驅動:php<?php // config/cache.php return [ // 預設快取驅動 'default' => env('cache.driver', 'memcached'), // 快取連線設定 'stores' => [ 'memcached' => [ // 快取型態 'type' => 'memcached', // 伺服器列表 'host' => '127.0.0.1', // ServBay Memcached 預設位址 'port' => 11211, // ServBay Memcached 預設埠 'persistent' => false, 'expire' => 0, 'timeout' => 0, 'prefix' => '', ], // ... 其他快取設定 ... ], ];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23程式中使用 Memcached 快取
於控制器或路由 callback 使用 ThinkPHP 的
Cache
Facade 存取 Memcached:php<?php use think\facade\Cache; use think\facade\Route; Route::get('/memcached-example', function () { // 設定快取,有效期 600 秒 Cache::set('my_memcached_key', 'This value is from Memcached!', 600); // 取得快取 $value = Cache::get('my_memcached_key'); return 'Value from Memcached: ' . $value; });
1
2
3
4
5
6
7
8
9
10
11
12
13開啟
https://thinkphp.servbay.demo/memcached-example
測試結果。
Redis 範例
安裝 Redis 擴充套件
ServBay PHP 軟體包已預載 Redis 擴充套件。僅需於「軟體包」標籤下,確認 Redis 服務已啟動。
設定 Redis 快取
編輯
config/cache.php
,讓 ThinkPHP 使用 Redis 作為快取驅動:php<?php // config/cache.php return [ // 預設快取驅動 'default' => env('cache.driver', 'redis'), // 快取連線設定 'stores' => [ 'redis' => [ // 快取型態 'type' => 'redis', // 伺服器位址 'host' => env('cache.host', '127.0.0.1'), // ServBay Redis 預設監聽位址 // 連接埠 'port' => env('cache.port', 6379), // ServBay Redis 預設埠 // 密碼(ServBay 預設無密碼) 'password' => env('cache.password', ''), // ServBay Redis 預設無密碼 'select' => 0, 'timeout' => 0, 'expire' => 0, 'persistent' => false, 'prefix' => '', ], // ... 其他快取設定 ... ], ];
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注意: ServBay 預設安裝的 Redis 沒有密碼。若自行設定了密碼,請記得於此同步更新
password
欄位。程式中使用 Redis 快取
於控制器或路由 callback 使用 ThinkPHP 的
Cache
Facade 存取 Redis:php<?php use think\facade\Cache; use think\facade\Route; Route::get('/redis-example', function () { // 設定永久有效快取(或以第三參數設定有效期) Cache::set('my_redis_key', 'Hello from Redis!'); // 取得快取 $value = Cache::get('my_redis_key'); return 'Value from Redis: ' . $value; });
1
2
3
4
5
6
7
8
9
10
11
12
13打開
https://thinkphp.servbay.demo/redis-example
測試。
關聯式資料庫範例
ServBay 整合 MySQL 與 PostgreSQL 等主流資料庫。可透過 ThinkPHP ORM 直接與資料庫互動。
使用 ThinkPHP 資料庫遷移工具
ThinkPHP 支援資料庫遷移工具,協助管理結構異動並支援團隊協作、版本控管。
安裝資料庫遷移工具
進入專案根目錄,透過 Composer 安裝 ThinkPHP 的資料庫遷移擴充:
bashcd /Applications/ServBay/www/servbay-thinkphp-app composer require topthink/think-migration
1
2建立遷移檔案
使用 ThinkPHP CLI 建立新遷移檔,例如建立
users
資料表:bashphp think migrate:create CreateUserTable
1這會於
database/migrations
目錄下產生新 PHP 檔,檔名包含時間戳與您的名稱(如20231027100000_create_user_table.php
)。編輯遷移檔案
開啟新產生的
database/migrations
檔案,於up()
方法定義users
表結構:php<?php // database/migrations/YYYYMMDDHHMMSS_create_user_table.php use think\migration\Migrator; use think\migration\db\Column; class CreateUserTable extends Migrator { /** * Change Method. * * Write your reversible migrations using this method. * * More information on writing migrations is available here: * http://docs.phinx.org/en/latest/migrations.html#the-change-method * * The following commands can be used in this method and Phinx will * automatically reverse them when rolling back: * * createTable * renameTable * addColumn * addCustomColumn * renameColumn * addIndex * addForeignKey * createDatabase * renameDatabase * dropTable * dropColumn * dropIndex * dropForeignKey */ public function change() { // 使用 createTable 方法建立資料表 $table = $this->table('users'); $table->addColumn('name', 'string', ['limit' => 50, 'comment' => '使用者姓名']) ->addColumn('email', 'string', ['limit' => 100, 'comment' => '電子信箱']) ->addIndex(['email'], ['unique' => true]) // 新增唯一索引 ->addTimestamps() // 增加 created_at 與 updated_at 欄位 ->create(); // 執行建立 } // 若不用 change 方法,也可分別定義 up() 與 down() 方法 /* public function up() { $table = $this->table('users'); $table->addColumn('name', 'string', ['limit' => 50, 'comment' => '使用者姓名']) ->addColumn('email', 'string', ['limit' => 100, 'comment' => '電子信箱']) ->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
60
61
62執行資料庫遷移
請至 ServBay 終端,確認於專案根目錄下,再運行下方指令建立
users
表:bashphp think migrate:run
1若成功,資料庫中將出現新的
users
表。
MySQL 範例
假設已於 ServBay 啟動 MySQL 並於 config/database.php
設定正確內容(參考前文)。
設定 MySQL 連線
請參考前述「初始化專案設定」之 MySQL 範例內容,確認
config/database.php
內mysql
設定無誤。程式中寫入使用者資料
用 ThinkPHP 的
Db
Facade 或 ORM 模型插入資料。下例採用Db
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' => '[email protected]', // 使用品牌示範信箱 'created_at' => date('Y-m-d H:i:s'), // 若 addTimestamps() 未自動寫入時手動填入 '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
17訪問
https://thinkphp.servbay.demo/mysql-add-user
測試寫入。程式中查詢使用者資料
以
Db
Facade 或 ORM 查詢資料:php<?php use think\facade\Db; use think\facade\Route; Route::get('/mysql-users', function () { $users = Db::table('users')->select(); // 取得所有用戶資料 return json($users); // 回傳 JSON 格式 });
1
2
3
4
5
6
7
8訪問
https://thinkphp.servbay.demo/mysql-users
查看users
資料表資料。
PostgreSQL 範例
假設已於 ServBay 開啟 PostgreSQL 服務,並於 config/database.php
設妥連線資訊。
設定 PostgreSQL 連線資訊
請確保
config/database.php
檔有如下(或依實際需求微調) PostgreSQL 設定:php<?php // config/database.php (部分) return [ // ... 其他設定 ... 'connections' => [ // ... MySQL 設定 ... 'pgsql' => [ // 資料庫型態 'type' => 'pgsql', // 伺服器位址 'hostname' => env('database.hostname', '127.0.0.1'), // 資料庫名稱 'database' => env('database.database', 'servbay_thinkphp_app'), // 建議專案專用資料庫 // 使用者名稱 'username' => env('database.username', 'root'), // 密碼 'password' => env('database.password', 'password'), // ServBay 預設密碼,僅供本機開發! // 連接埠 'hostport' => env('database.hostport', '5432'), // PostgreSQL 預設埠 // ... 其他設定 ... ], // ... 其他資料庫連線 ... ], ];
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重要提醒:
- 請如同 MySQL 最好為每個專案建立獨立 PostgreSQL 資料庫,並於設定檔指定。
- ServBay 預設 PostgreSQL
root
密碼為password
,僅限本地開發。
程式中寫入使用者資料
以 ThinkPHP
Db
Facade 或 ORM 插入資料,並指定pgsql
連線:php<?php use think\facade\Db; use think\facade\Route; Route::get('/pgsql-add-user', function () { try { Db::connect('pgsql')->table('users')->insert([ // 指定 pgsql 連線 'name' => 'ServBay PgSQL User', 'email' => '[email protected]', // 使用品牌示例信箱 // PostgreSQL 時間戳可能需手動填入,依遷移定義而異 '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
18訪問
https://thinkphp.servbay.demo/pgsql-add-user
測試資料寫入。程式中查詢使用者資料
使用
Db
Facade 或 ORM 查詢資料,指定pgsql
連線:php<?php use think\facade\Db; use think\facade\Route; Route::get('/pgsql-users', function () { $users = Db::connect('pgsql')->table('users')->select(); // 指定 pgsql 連線查詢 return json($users); // 回傳 JSON 格式 });
1
2
3
4
5
6
7
8訪問
https://thinkphp.servbay.demo/pgsql-users
查看 PostgreSQL 中的users
表資料。
總結
完成上述步驟後,您已經成功在 ServBay 本機環境建立、設定並運行一套 ThinkPHP 8 專案。您學會如何利用 ServBay 內建 Composer 建立專案、設定 Caddy Web 伺服器應對 ThinkPHP 路由,並連接及運用 MySQL、PostgreSQL、Memcached、Redis 等資料庫服務。
ServBay 大幅簡化 ThinkPHP 等 PHP 框架的本地開發部署流程,助您專注於業務開發。現在即可繼續擴展您的 ThinkPHP 應用,充分發揮 ServBay 豐富軟體包與功能的價值。