微型的php框架:Simple

jopen 10年前發布 | 15K 次閱讀 Simple PHP開發

Overview

Simple 一個結構清晰層次分明微型的php框架。

Simple 不是一個試圖滿足所有需求的怪物

Simple 試圖解放你的思想,不被框架的條條框框所限制。

Simple 試圖成為一個能讓你自由發揮的框架。

Simple 試圖規范流程,而不是提供一個非常具體的實現。

需求

  1. >php5.3.0。
  2. 熟悉php,熟悉面向對象編程。
  3. 愛翻php手冊。
  4. 推薦IDE,phpstorm

核心思想

1. 控制請求到響應的整個生命周期,并且對此按照合適的粒度進行分層,而不是著眼于提供龐大的功能。

這部分的分層在項目的Cycle包下面,主要包含有

  • Application
  • Router
  • Request
  • Caller
  • Response

執行的流程是從上到下,具體的流程為:

  1. 所有的請求都會進入Application的run方法,整個請求到相應返回的生命周期都是在這個方法中進行的。
  2. 在Application的run方法中會生成Router對象。
  3. 根據Router對象,會生成Request對象,所有的請求參數都會包裝在Request里面。
  4. 把生成的Request對象傳遞給Caller對象,負責調用具體的接口(這里既可以是Controller,也可以實現為RPC)。
  5. 然后接口生成Response對象。
  6. 最后根據項目的需要,把Response對象轉換為你所需要的格式,返回給客戶端。

2. 提供方便的數據操作模式(注:不提供復雜的ORM)。

數據相關的操作都封裝在了Model包下面,主要分為這個幾個層次:

  1. Vo,實體類。
  2. Dao,數據訪問。
  3. Driver,數據連接驅動。
  4. 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方式有:

  1. 打印輸出,例如 echo,print_r,var_dump之類的打印函數。
  2. 文件記錄,把調試信息寫入到一個文本里面。

這兩種方式的缺點也,調試起來麻煩,調試完成后容易忘記去掉,由于采用的是系統函數,無法在非debug狀態下關掉。比較好的方式是,系統自定義一個調試方法,可以在非debug的情況下關掉。在Debug類下面封裝了一個trace方法。專門用來調試,輸出會默認輸出到,Google Chrome的console面板下面,前提是你得安裝一個叫做Chrome Logger的插件。

5. Config,配置

只支持php數組形式的配置。為什么不支持yaml和json或者其他格式的配置? 無論你采用什么格式的配置文件,最終都必須解析轉換為php的數組或者對象,而且由于每次常規的操作都會用到配置文件,都會去解析一次,這個太沒必要了。項目的配置相關都放在了Config目錄下面,系統提供了一個ConfigManager::get的方法去獲取對應的配置信息。系統默認會現在項目配置中去找,若找到就直接返回,找不到,就到系統默認的配置中去查找,找到返回,如果找不到會拋出一個異常。

6. Bootstrap,系統引導

引導整個應用,提供服務。主要有兩個步驟

  1. 初始化環境,使用init方法,這里面注冊了對警告的捕捉未被捕捉異常的處理自動加載文件
  2. start,啟動服務,注冊Application對象。

7.Application包

由于框架本身只是提供一個規范和標準,沒有提供具體的實現。所以Application包下面提供了兩種不同類型應用的實現。

  1. Game,適合于SNS游戲類型的應用。所有面向服務不需要輸出html的應用都適用。

  2. Web,Web網站類型應用。系統采用的模板引擎是twig

項目主頁:http://www.baiduhome.net/lib/view/home/1403571845014

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!