首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

ThinkPHP 學習筆記:安裝配置、目錄結構、路由訪問、控制器與視圖綁定完整指南

     編輯:PHP 相關知識

ThinkPHP 是國產經典 MVC 框架,3.2 版本引入命名空間、Composer、模塊化架構。本文記錄安裝入口配置、自動生成目錄結構、URL 訪問規則、控制器/視圖對應關係、常見坑點。

1. 安裝與入口文件


# 推薦 Composer 安裝 (ThinkPHP 6.0+)
composer create-project topthink/think tp6

# 3.2 版本手動安裝:下載框架核心,建立入口文件
# 目錄結構:
# /wwwroot
#   ├─ ThinkPHP/          框架核心
#   ├─ admin.php          後台入口
#   ├─ index.php          前台入口

入口文件 admin.php:

<?php
// 定義應用名稱與路徑
define('APP_NAME', '');           // 空則不加前綴
define('APP_PATH', './admin/');   // 應用目錄 (相對入口文件)
define('APP_DEBUG', true);        // 開發模式:關閉緩存、顯示錯誤

// 載入框架引導文件
require __DIR__ . '/ThinkPHP/ThinkPHP.php';
?>

2. 自動生成的應用目錄結構

admin/ (APP_PATH)
├─ Common/           公共函數、配置
│   ├─ common.php    公共函數庫
│   ├─ config.php    應用配置 (資料庫、快取等)
│   └─ function.php  助手函數
├─ Conf/             配置文件 (3.2 常用)
│   └─ config.php
├─ Lang/             語言包
│   └─ zh-cn.php
├─ Lib/              核心業務代碼 (MVC)
│   ├─ Action/       控制器 (3.2 稱為 Action)
│   │   └─ IndexAction.class.php
│   ├─ Model/        模型
│   │   └─ UserModel.class.php
│   └─ ...           可擴展 Validate, Service 等
├─ Runtime/          運行時緩存、日誌、編譯模板
│   ├─ Cache/
│   ├─ Logs/
│   ├─ Temp/
│   └─ Data/
└─ Tpl/              模板視圖
    └─ Index/        對應控制器名
        └─ index.html  對應操作方法名

3. URL 訪問規則 (核心難點)

模式URL 格式對應控制器/方法說明
普通 (PATH_INFO)admin.php?m=User&a=loginUserAction::login()GET 參數 m=模塊/控制器, a=操作/方法
PATH_INFO (推薦)admin.php/User/loginUserAction::login()需 Web 服務器配置 rewrite
REWRITE (隱藏入口)/admin/User/loginUserAction::login()Nginx/Apache rewrite 規則隱藏 admin.php
兼容模式admin.php?s=/User/loginUserAction::login()不支援 PATH_INFO 環境

關鍵規則:

  • 控制器類名 首字母大寫 + Action 後綴:UserAction,對應 URL m=User 或 /User/
  • 操作方法名 小寫:login(),對應 URL a=login 或 /login
  • 模板文件:Tpl/控制器名(無Action)/操作名.html → Tpl/User/login.html
  • $this->display('template') 可指定其他模板,不加參數則自動對應當前操作

4. 控制器寫法

<?php
// Lib/Action/UserAction.class.php
namespace Home\Action;  // 3.2.3+ 需命名空間
use Think\Action;

class UserAction extends Action {
    // 登入頁面
    public function login() {
        if (IS_POST) {
            $username = I('post.username');
            $password = I('post.password');
            // 驗證邏輯...
            $this->success('登入成功', U('Index/index'));
        } else {
            $this->display(); // 自動載入 Tpl/User/login.html
        }
    }

    // 註冊
    public function register() {
        $this->display('register'); // 載入 Tpl/User/register.html
    }

    // 受保護方法:前綴 _ 不會被 URL 直接訪問
    protected function _checkAuth() {
        // 權限檢查
    }
}
?>

5. 模板寫法

{-- Tpl/User/login.html --}



    
    用戶登入
    


{-- 表單令牌 --} 用戶名: 密碼:
{-- 輸出模板變量 --} {$vo.name} - {$vo.email}

6. 常見配置 (Conf/config.php)

<?php
return [
    // 資料庫配置
    'DB_TYPE'   => 'mysql',
    'DB_HOST'   => '127.0.0.1',
    'DB_NAME'   => 'thinkphp',
    'DB_USER'   => 'root',
    'DB_PWD'    => 'password',
    'DB_PORT'   => 3306,
    'DB_PREFIX' => 'tp_',
    'DB_CHARSET'=> 'utf8',

    // URL 模式
    'URL_MODEL' => 2, // 2=PATH_INFO, 3=REWRITE, 1=普通, 0=兼容

    // 模板引擎
    'TMPL_ENGINE_TYPE' => 'Think',
    'TMPL_CACHE_ON'    => !APP_DEBUG,
    'TMPL_L_DELIM'     => '{',
    'TMPL_R_DELIM'     => '}',

    // 預設模塊/控制器/操作
    'DEFAULT_MODULE'     => 'Index',
    'DEFAULT_CONTROLLER' => 'Index',
    'DEFAULT_ACTION'     => 'index',
];
?>

7. Nginx Rewrite 規則 (隱藏入口文件)


server {
    listen 80;
    server_name tp.example.com;
    root /wwwroot;  # 入口文件所在目錄

    index index.php admin.php;

    location / {
        # 嘗試直接訪問文件/目錄,否則轉發到 index.php
        try_files $uri $uri/ /index.php?s=$uri&$args;
    }

    # 後台入口單獨處理
    location /admin {
        try_files $uri $uri/ /admin.php?s=$uri&$args;
    }

    location ~ \.php$ {
        fastcgi_pass unix:/run/php/php8.2-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    # 禁止訪問 Runtime、Conf 等敏感目錄
    location ~ /(Runtime|Conf|Lib)/ {
        deny all;
    }
}

8. 常見坑點總結

問題原因解決
控制器找不到 (404)類名首字母未大寫、或缺少 Action 後綴類名必須如 UserAction,URL 用 User
模板找不到目錄結構不對、或大小寫不匹配模板路徑:Tpl/控制器名/操作名.html,Linux 區分大小寫
URL 參數獲取不到用 $_GET 而非 I()統一用 I('get.id'), I('post.name'), I('id')
驗證碼不顯示GD 擴展未裝、或 Session 路徑不可寫安裝 php-gd、檢查 session.save_path 權限
分組/模塊不生效3.2 版本模塊配置變更查閱對應版本文檔,配置 MODULE_ALLOW_LIST

總結

ThinkPHP 3.2 核心概念:

  1. 單一入口:所有請求經 index.php/admin.php 分發
  2. 模塊/控制器/操作:URL 映射 m=模塊&a=操作 → 模塊Action::操作()
  3. 命名規範:類名大寫開頭+Action,方法小寫,模板目錄對應控制器名
  4. 自動生成目錄:首次訪問入口文件自動建立 APP_PATH 下結構
  5. 配置優先:Conf/config.php 覆蓋框架預設配置

新專案建議直接使用 ThinkPHP 6.0/8.0 (Composer 安裝、PSR-4、PHP 8.1+ 支援),3.2 僅維護老專案。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved