在 ServBay 中建立並執行 ThinkPHP 8 專案
本文將引導您如何藉助強大的本機網頁開發環境 ServBay,快速建立、設定並運行一個基於 ThinkPHP 8 框架的 PHP 專案。ServBay 提供預先配置好的 PHP 執行環境、網頁伺服器(Caddy 或 Nginx)以及多種資料庫,大幅簡化 ThinkPHP 專案的在地建置流程。
什麼是 ThinkPHP?
ThinkPHP 是發源於中國的開源、快速、簡單、物件導向 PHP 開發框架。它秉持「簡潔、高效」的理念,致力於為開發者提供便利的工具集,以便建構現代化的網頁應用。憑藉傑出的易用性、豐富的功能(如強大的 ORM、彈性的路由、內建的樣板引擎及快取支援)以及活躍的社群,ThinkPHP 在中國 PHP 開發圈有廣泛應用。
ThinkPHP 的主要特色與優勢
- 簡潔高效: 框架設計精簡,程式結構清晰,易於理解與維護,開發效率高。
- 功能完善: 具備網頁開發常用元件,如 MVC 架構、ORM、樣板引擎、快取、會話管理、權限認證、表單令牌等。
- 強大 ORM: 內建易用且功能強大的物件關聯映射,簡化資料庫操作。
- 彈性路由: 支援多種路由定義方式,滿足複雜的 URL 結構需求。
- 龐大生態: 拥有大量擴充函式庫與外掛,以及廣大活躍的開發者社群,資源豐富。
- 持續更新: 框架版本迭代快,緊跟 PHP 語言與網頁開發趨勢。
ThinkPHP 適合各種規模的網頁專案,從小型網站到大型企業級應用都能夠應對。
使用 ServBay 建置 ThinkPHP 8 專案
ServBay 為 ThinkPHP 8 的本機開發提供理想環境,包含:
- 預先安裝多個版本的 PHP 及常用擴充套件。
- 內建網頁伺服器(Caddy 或 Nginx),輕鬆設定網站。
- 整合 MySQL、PostgreSQL、MongoDB、Redis、Memcached 等資料庫服務。
- 內建 Composer 相依套件管理工具。
本指南將善用 ServBay 這些功能,快速建立您的 ThinkPHP 8 專案。
前置準備
在開始之前,請確認完成以下步驟:
- 已於 macOS 或 Windows 系統下載並安裝 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 網站根目錄執行以下指令,建立新專案:
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
內的預設值。
- 請將
設定網頁伺服器
ThinkPHP 專案入口為 public/index.php
,且依賴 URL 重寫(Rewrite)來處理路由。由於其路由規則與常見靜態檔案直達有別,因此需於 ServBay 內選用專屬 Rewrite 規則。
進入網站設定介面時,在 Rewrite 規則下拉選單選擇 ThinkPHP
,並點擊儲存。
詳細操作可參考 新增第一個網站。
新增範例程式碼
為測試網站設定與 ThinkPHP 基本路由是否運作,新增一簡單路由及控制器。
編輯 /Applications/ServBay/www/servbay-thinkphp-app/route/app.php
,加入以下程式,定義簡易 GET 路由:
php
<?php
// route/app.php
use think\facade\Route;
// 定義 servbay 路由,存取 /servbay 時執行匿名函式
Route::get('servbay', function () {
return 'Hello ServBay!';
});
// ... 其他路由 ...
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
存取網站
操作完成後,請開啟瀏覽器,輸入已設定的本機網址及測試路由:
https://thinkphp.servbay.demo/servbay
若一切順利,瀏覽器應顯示 Hello ServBay!
,這代表您的 ThinkPHP 8 專案已於 ServBay 正常執行,網頁伺服器與 PHP-FPM 設定均完成。
NoSQL 資料庫範例
ServBay 預裝多款 NoSQL 資料庫,如 Memcached 與 Redis。ThinkPHP 內建快取抽象層,可方便接軌這些 NoSQL 快取服務。
Memcached 範例
安裝 Memcached 擴充套件
ServBay PHP 套件預設已安裝 Memcached。僅需於 ServBay 控制台「套件」分頁檢核 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 快取
於控制器或路由回呼中使用 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', '這個值來自 Memcached!', 600); // 取得快取 $value = Cache::get('my_memcached_key'); return '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。僅需於 ServBay 控制台「套件」分頁檢核 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 快取
於控制器或路由回呼中用 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 '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 命令行工具生成新遷移檔,如建立
users
資料表的遷移:bashphp think migrate:create CreateUserTable
1遷移檔會產生於
database/migrations
資料夾,檔名含時間戳與指定名稱,如20231027100000_create_user_table.php
。編輯遷移檔案
開啟剛建立的遷移 PHP 檔,在
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 配置範例,確保連線資訊正確。
程式中寫入使用者資料
使用 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' => 'demo@servbay.demo', // 品牌示範信箱 'created_at' => date('Y-m-d H:i:s'), // 手動增加時間戳(若 addTimestamps() 尚未自動填入) 'updated_at' => date('Y-m-d H:i:s'), ]); return '使用者新增成功!'; } catch (\Exception $e) { return '新增失敗:' . $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 並配置連線。
設定 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' => 'pgsql-demo@servbay.demo', // 品牌示範信箱 // PostgreSQL 時間戳欄位可能需手動填入,依遷移與 ThinkPHP 版本而定 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s'), ]); return 'PostgreSQL 使用者新增成功!'; } catch (\Exception $e) { return 'PostgreSQL 使用者新增失敗:' . $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 資料。
結論
透過以上步驟,您已成功利用 ServBay 本機開發環境建立、設定並運行 ThinkPHP 8 專案。您學會如何運用 ServBay 內建 Composer 建立專案;設定 Caddy 網頁伺服器處理 ThinkPHP 路由;並串接使用 ServBay 提供的 MySQL、PostgreSQL、Memcached 及 Redis 資料庫服務。
ServBay 大幅簡化了本地 PHP 框架(如 ThinkPHP)環境建置,讓您能夠專心於業務邏輯開發。現在即可開始進一步開發您的 ThinkPHP 網頁應用,善用 ServBay 提供的各項套件與功能。