微型的php框架:Simple
Overview
Simple 是一個結構清晰、層次分明、微型的php框架。
Simple 不是一個試圖滿足所有需求的怪物。
Simple 試圖解放你的思想,不被框架的條條框框所限制。
Simple 試圖成為一個能讓你自由發揮的框架。
Simple 試圖規范流程,而不是提供一個非常具體的實現。
需求
- >php5.3.0。
- 熟悉php,熟悉面向對象編程。
- 愛翻php手冊。
- 推薦IDE,phpstorm
核心思想
1. 控制請求到響應的整個生命周期,并且對此按照合適的粒度進行分層,而不是著眼于提供龐大的功能。
這部分的分層在項目的Cycle包下面,主要包含有
- Application
- Router
- Request
- Caller
- Response
執行的流程是從上到下,具體的流程為:
- 所有的請求都會進入Application的run方法,整個請求到相應返回的生命周期都是在這個方法中進行的。
- 在Application的run方法中會生成Router對象。
- 根據Router對象,會生成Request對象,所有的請求參數都會包裝在Request里面。
- 把生成的Request對象傳遞給Caller對象,負責調用具體的接口(這里既可以是Controller,也可以實現為RPC)。
- 然后接口生成Response對象。
- 最后根據項目的需要,把Response對象轉換為你所需要的格式,返回給客戶端。
2. 提供方便的數據操作模式(注:不提供復雜的ORM)。
數據相關的操作都封裝在了Model包下面,主要分為這個幾個層次:
- Vo,實體類。
- Dao,數據訪問。
- Driver,數據連接驅動。
- Pool,連接池。
Vo
實體類,全稱為Value Object。顧名思義,就是對數據庫字段的一個映射。底層提供了兩種類型的Vo,NoSQLVo和MySQLVo 項目中的實體類定義字段的時候必須定義為 proteced $_變量名稱
的格式,并且最好實現各個字段的getter和setter方法,這部分代碼完全可以由IDE生成(注:推薦phpstorm)。
Dao
數據訪問層,所有的數據訪問都應該通過該層來訪問,底層提供了兩種類型的Dao,并且提供了一些針對單條信息的基礎的操作方法。 如果底層的Dao層的功能不能滿足你的要求,你自己自行擴展繼承。
Driver
數據庫驅動層,目前關系型數據庫只支持PDO的方式,NoSQL類型的數據庫只支持Memached。
Pool
連接池(針對一個請求到相應生命周期而言),根據配置里面的標識獲取數據庫的連接,同一個標識多次獲取,只會連接一次數據庫。
3. 日志功能
系統底層采用的是開源的monolog,系統包裝了一個簡單通用的方法來寫入日志,封裝在Log包下面,有一個叫LogUtil的工具類,有一個方法叫write。
4. debug功能
在php中,常用的debug方式有:
- 打印輸出,例如 echo,print_r,var_dump之類的打印函數。
- 文件記錄,把調試信息寫入到一個文本里面。
這兩種方式的缺點也,調試起來麻煩,調試完成后容易忘記去掉,由于采用的是系統函數,無法在非debug狀態下關掉。比較好的方式是,系統自定義一個調試方法,可以在非debug的情況下關掉。在Debug類下面封裝了一個trace方法。專門用來調試,輸出會默認輸出到,Google Chrome的console面板下面,前提是你得安裝一個叫做Chrome Logger的插件。
5. Config,配置
只支持php數組形式的配置。為什么不支持yaml和json或者其他格式的配置? 無論你采用什么格式的配置文件,最終都必須解析轉換為php的數組或者對象,而且由于每次常規的操作都會用到配置文件,都會去解析一次,這個太沒必要了。項目的配置相關都放在了Config目錄下面,系統提供了一個ConfigManager::get的方法去獲取對應的配置信息。系統默認會現在項目配置中去找,若找到就直接返回,找不到,就到系統默認的配置中去查找,找到返回,如果找不到會拋出一個異常。
6. Bootstrap,系統引導
引導整個應用,提供服務。主要有兩個步驟
- 初始化環境,使用init方法,這里面注冊了對警告的捕捉,未被捕捉異常的處理,自動加載文件。
- start,啟動服務,注冊Application對象。
7.Application包
由于框架本身只是提供一個規范和標準,沒有提供具體的實現。所以Application包下面提供了兩種不同類型應用的實現。
-
Game,適合于SNS游戲類型的應用。所有面向服務不需要輸出html的應用都適用。
-
Web,Web網站類型應用。系統采用的模板引擎是twig