教程地址
從0-1
寫出來的。
剛寫完的文件,有什麼問題,歡迎指正。
(釋出時間不對勁? 沒錯 通宵了 先打會遊戲 等下再睡覺)
原始碼
教程原始碼
:php_frame (giteee)原型原始碼
: php_frame (github)
原型原始碼
: 先寫好框架,就是 原型原始碼
, 才開始寫此教程。教程原始碼
: 按此教程步驟走下去,會最終變成教程原始碼
,大部分都是複製 原型原始碼
的。
設計方向
閉門造輪子
聽到很多,不要建立重複輪子了!
最後終究還是要 學習框架底層
= 學習輪子
,這也此框架目的之一。
閉門造輪
成為這個框架最大的特色。
所以此教程不是 手摸手帶你組裝php現代化框架
, 而是 手摸手帶你建立php現代化框架
。
不完善全部程式碼
指不是框架執行必要的程式碼, 本教程不會寫!
讀者自行完善, 這也可以加深讀者的印象。
比如路由, get``post
寫好了,
put``post``delete
讓讀者去完善。
最少程式碼
我個人較為討厭長程式碼,每個字都需要去解讀。
因為 不完善全部程式碼
, 所以程式碼量才少。
如果全部都完善了,那為什麼不去看 輪子
原始碼?
因為程式碼量多唄 !
目錄結構
+---app
| | helpers.php // 函式
| +---controller
| | UserController.php // 示例控制器
| +---exceptions
| | ErrorMessageException.php // 錯誤訊息返回
| | HandleExceptions.php // 繼承core/HandleExceptions
| +---middleware
| | ApiMiddleWare.php
| | ControllerMiddleWare.php
| | IsAuthMiddleWare.php
| | WebMiddleWare.php // web.php載入的中介軟體
| \---models
| User.php // 示例模型
+---config
| database.php // 資料庫配置
| log.php // 日誌配置
| view.php // 檢視配置
+---core
| | Config.php // 配置
| | Controller.php // 基礎控制器
| | HandleExceptions.php // 異常&錯誤 託管處理
| | PipleLine.php // 管道
| | Response.php // 響應
| | RouteCollection.php // 路由
| | SwooleContext.php // 協程上下文管理
| | TestCase.php // 基礎測試檔案
| +---database
| | | Database.php
| | +---connection
| | | Connection.php
| | | ConnectionInterface.php
| | | MysqlConnection.php // mysql連結
| | | SqlServerConnection.php
| | +---model
| | | Builder.php // 模型構造器
| | | Model.php // 基礎模型
| | \---query
| | Grammar.php
| | MysqlGrammar.php // 編譯成sql語句
| | QueryBuilder.php // 查詢構造器
| +---log
| | | Logger.php // 日誌管理
| | \---driver // 不同型別日誌實現
| | DailyLogger.php
| | StackLogger.php
| |
| +---request
| | PhpRequest.php // 請求
| | RequestInterface.php
| \---view
| Blade.php // laravel模板引擎
| Thinkphp.php // tp模板引擎
| View.php // 檢視介面卡
| ViewInterface.php
+---public
| index.php // 單一入口檔案
+---routes
| api.php
| web.php // 大部分功能可以在這裡執行
+---storage
| daily.log // 框架日誌 按日期型別
| php_frame.log // 框架日誌
| swoole.pid // swoole的程式pid
+---tests
| ExampleTest.php // 測試示例檔案
+---phpunit.xml // phpunit的配置
+---app.php // 框架要經過這個載入
+---swoole.php // swoole的http伺服器
文章目錄
基礎篇
- 第一步 建立框架目錄
- 引入composer自動載入
- composer自動載入 (解釋篇)
- 新增函式檔案helpers.php
- 建立容器 (反射解析依賴 註冊樹模式)
- 關於psr規範解釋
- 關於”容器” “契約” “依賴注入” (解釋篇)
- 初始化請求(Request)
- 響應 (Response)
- 路由一 (路由組實現)
- 路由二 (加入中介軟體)
- 配置資訊 (類似laravel)
- 資料庫連線 (多例模式)
- 查詢構造器 (query builder)
mvc實現
- M 模型實現 (資料對映 + 原型 模式)
- C 控制器實現 + 控制器中介軟體
- V 檢視實現 (Laravel Blade 引擎)
- V 檢視切換成 ThinkPhp 模板 引擎)
其他輪子
- 日誌
- 自定義異常 (異常託管)
- 單元測試 (phpunit)
- 替換成swoole的http伺服器
- 協程上下文解決request問題
- qps測試
本作品採用《CC 協議》,轉載必須註明作者和本文連結