Skip to content

開發者總覽

這一節寫給要擴充套件系統的人。使用者手冊在 使用手冊

技術棧

部分用的什麼
語言原生 PHP 8.0+
資料庫Eloquent ORM(illuminate/database
模板Smarty 3.1 + PHP 原生渲染
會話PHP session
路由單入口 index.php,透過 ?s=/路徑 分發

目錄結構

app/
  Controller/     控制器:Admin(後臺) User(前臺) Shared(對接) Install
  Service/        業務邏輯,下單、充值、發貨都在 Service/Bind/
  Model/          Eloquent 模型
  View/           模板,User/Theme/ 下是各套前臺主題
  Plugin/         外掛
  Pay/            支付外掛
  Consts/Hook.php Hook 點位常量
kernel/           核心:路由、註解、外掛載入、工具類
config/           配置檔案(資料庫連線等)
runtime/          執行時快取與日誌

三種擴充套件方式

方式適合文件
Hook 鉤子在系統既有流程裡插一腳(下單後發通知、註冊時風控)Hook 鉤子大全
外掛完整功能模組,有自己的頁面、配置、路由外掛開發
支付外掛對接一個新的支付平臺支付外掛開發

外部系統要拉商品、下單,用 API 對接

開發前必須知道的幾條

這幾條踩過的人都知道有多疼:

1. hook() 的引數是按引用傳的,實參必須是變數。

php
hook(P, new X());              // 致命 500
hook(P, $this->getUser());     // 致命 500
hook(P, ['a' => 1]);           // 致命 500
$user = $this->getUser();
hook(P, $user);                // 正確

而且只有真跑到那一行才炸,測試時很容易漏。

2. 生命週期註解必須寫命名引數。

php
#[Plugin(state: Plugin::INSTALL)]   // 正確
#[Plugin(Plugin::INSTALL)]          // 靜默不觸發,外掛"啟用成功"但建表沒跑

3. update.php 跑在新程式碼覆蓋之前。

升級指令碼執行時,新版本的檔案還沒複製進來。裡面引用新版才有的類、常量、方法,異常會被靜默吞掉。只能用舊版 API 和字面量。

4. 新增 Hook 檔案後要停用再啟用外掛。

runtime/plugin/hook 是編譯出來的登錄檔快取,只在外掛啟用時重建。光重新整理頁面不會生效。

5. 清模板快取只刪 runtime/view/compile

不要刪 runtime/config,那是配置快取,刪了整站會出問題。

除錯

出問題先看網站根目錄runtime.log(不是 runtime/log/)。

DEBUG=false 時任何未捕獲異常都會渲染成 404 頁面並返回 HTTP 500,真實原因只在 runtime.log 裡。

基於 MIT 協議開源