# 控制器架構
* * * * *
先來看看咱們系統的架構圖,便于理解結構。

從圖上可以看到系統初始化行為執行完畢就進入了公共控制器,為什么會執行進公共控制器呢?
咱們隨便弄個URL來分析一下。

這個是統計分析下的執行速度功能,URL是https://demo.onebase.org/admin.php/statistic/exespeed.html
admin.php 入口進來的肯定就是 admin模塊咯,statistic控制器,exespeed方法。
找到方法所在位置

代碼拉到最上方可以看到 class Statistic extends AdminBase,
說明此類繼承了 AdminBase,通過命名就可以猜測到這個就是admin模塊的基礎控制器,既然繼承了AdminBase 那肯定是會先執行父類的構造方法,然后打開AdminBase.php發現class AdminBase extends ControllerBase ,而 ControllerBase 是公共模塊下的控制器根源,為什么說是根源呢?因為這是OneBase中最底層的控制器了,再往下看就是 class ControllerBase extends Controller,框架的控制器就不在講解范圍了,所以咱們將ControllerBase當做最底層的控制器。
通過分析咱們大概就心里有個控制器繼承層次關系了,Statistic 繼承了 AdminBase 繼承了 ControllerBase。
因為類實例化之前會執行父類構造函數,那么執行的流程就是 ControllerBase -> AdminBase -> Statistic
此處只是隨便拿一個統計分析類的某個操作來講解,其他控制器類也是一樣的流程,當然也有例外 比如 Login 控制器,因為在AdminBase 中有登錄驗證,若繼承AdminBase那豈不是驗證不通過,那就沒辦法登錄咯。
但是 Login 中咱們還需要獲取請求信息,而請求信息是在ControllerBase中進行的初始化,所以此處就直接跳過了AdminBase,繼承 ControllerBase,這樣就不用驗證登錄并且使用請求信息了。
其他模塊下的控制器也是一樣,可以看到api模塊下的控制器中有 ApiBase.php,index模塊下的控制器中有IndexBase.php等。
控制架構設計中,這種多層父類控制器是有好處的,比如咱們想整套系統執行時都執行某操作,那么所有模塊下的控制器都會執行 ControllerBase, 那就可以放在 ControllerBase中,若咱們想在api模塊下做一個請求頻率限制而不影響其他模塊,那么咱們就可以把代碼放在 ApiBase.php中觸發。
- 序言
- 基礎
- 安裝環境
- 安裝演示
- 規范
- 目錄
- 介紹
- 后臺介紹
- 后臺首頁
- 會員管理
- 系統管理
- 系統設置與配置管理
- 菜單管理
- 系統回收站
- 服務管理
- 插件管理
- 文章管理
- 接口管理
- 優化維護
- SEO管理
- 數據庫
- 文件清理
- 行為日志
- 執行記錄
- 統計分析
- 接口介紹
- 接口文檔
- 錯誤碼設計
- Token介紹
- 前臺介紹
- 架構
- 架構總覽
- 生命周期
- 入口文件
- 模塊設計
- 依賴注入
- 控制器架構
- 邏輯架構
- 驗證架構
- 服務架構
- 模型架構
- 行為架構
- 插件架構
- 配置
- 配置介紹
- 配置加載
- 配置擴展
- 請求
- 請求信息
- 日志
- 后臺行為日志
- 系統執行日志
- 框架日志
- 數據
- 數據庫設計
- 數據字典
- 數據庫操作
- 事務控制
- 混合操作
- 實戰
- 控制器
- 邏輯與驗證
- 視圖與模型
- 插件研發
- 服務研發
- 接口研發
- 雜項
- 數據導入導出
- 二維碼條形碼
- 郵件發送
- 云存儲服務
- 支付服務
- 短信服務
- 微信分享
- 生成海報
- 聊天室
- PJAX
- Demo
- Widget
- 附錄
- 常量參考
- 配置參考
- 函數參考
- 進階
- Redis
- 自動緩存
- 全自動緩存
- 索引
- 數據簽名
- 全自動事務
- 隊列