ThinkPHP (TP) 的「應用模式」是一套輕量級的運行環境定制機制,允許開發者為不同場景(API、CLI、后台、前台、測試)定義專屬的配置、核心類替換、引導流程。本文解析其核心原理、配置結構與實戰擴展姿勢。
ThinkPHP/Mode/ 目錄,命名 模式名.php(如 api.php, cli.php)。define('APP_MODE', 'api'); 或 $_GET['mode'](需配置開啟)。Think\Think 中 start() 方法加載模式文件,合并配置、註冊別名、替換核心類。Mode/api.php)<?php
return [
// 1. 核心類別名映射(替換默認實現)
'core' => [
'Think\Log' => 'Think\Log\Driver\Socket', // 日志發送到 Socket
'Think\Cache' => 'Think\Cache\Driver\Redis', // 默認緩存驅動
'Think\Session' => 'Think\Session\Driver\Redis', // Session 存 Redis
],
// 2. 配置合并(覆蓋惯例配置)
'config' => [
'APP_DEBUG' => false,
'URL_ROUTER_ON' => true,
'URL_HTML_SUFFIX' => 'json', // API 默認輸出 JSON
'DEFAULT_AJAX_RETURN' => 'json',
'TOKEN_ON' => false, // API 無狀態,關閉表單令牌
],
// 3. 別名註冊(縮短類名)
'alias' => [
'Response' => 'Think\Api\Response', // 統一響應格式類
'Validator'=> 'Think\Api\Validator',
],
// 4. 函數/類文件自動加載
'functions' => ['api_helper'], // 自動 include Common/api_helper.php
'autoload' => ['Think\Api'], // 註冊命名空間映射
];
?>
Think::getInstance($class),優先查找模式映射。適用于:替換日志/緩存/Session/數據庫驅動、自定義路由/控制器/視圖基類。Think::addAlias($alias, $class),允許在代碼中直接用短名 new Response() 實際實例化 Think\Api\Response。import。| 特性 | API 模式 | 后台模式 |
|---|---|---|
| 輸出格式 | JSON (RESTful) | HTML (模板渲染) |
| 調試級別 | 關閉 (生產) | 開啟 (開發) |
| 路由 | RESTful 資源路由 | 傳統 Controller/Action |
| 認證 | JWT / OAuth2 | Session + RBAC |
| 異常處理 | 統一 JSON 錯誤碼 | 友好錯誤頁面 |
| 核心類替換 | Log→Socket, Cache→Redis, View→JsonView | 默認驅動 |
ThinkPHP/Mode/mymode.php 返回配置數組。define('APP_MODE', 'mymode');。php index.php (CLI) 或瀏覽器訪問。APP_MODE 定義位置(必須在 require ThinkPHP.php 之前)、文件名大小寫(Linux 區分)。$_SERVER['REQUEST_URI'] 判斷自動切換模式,或用 Nginx 不同 location 指向不同入口文件(api.php, admin.php)。