搭建了一個自用的PHP框架

代碼簡單,功能簡便,PHP 新手也能看懂。

Git倉庫地址:https://gitee.com/zhongbaitong/mini-frame.git 

以下是搭建過程做的一個小記錄:

1. 使用 composer 實現文件自動加載

比起 spl_autoload_register() ,顯然 composer 更簡單跟強大,

參考文章: https://www.cnblogs.com/mrxy/p/8145173.html

2. 路由解析 

實現訪問 http://domain.com/index.php/index/index 時指向 /appliction/controller/Index.phpindex()方法

其實只是通過 $_SERVER 獲取 http://url.com/ctl/act 的 ctl 和 act 的值,

直接調用 ctl 控制器 act 方法即可(前提要實現 自動加載,否則需要手動 include ctl 類)

部分代碼:

// 獲取 url.com/ctl/act 的ctl 和 act
$arr_path = explode("/",trim($_SERVER["PATH_INFO"],"/"));
$controller = $arr_path[0] ?? "Index";
$action = $arr_path[1] ?? "index";

// 調用 ctl 類 的 act 方法;
$ctl_class = "\app\controller\\" . $controller;
print (new $ctl_class())->$action();

3. 視圖渲染

模仿 tp 的$this->fetch()方法,先創建父級控制器/Controller.php, fetch() 方法。

所謂實現功能僅只是加載 'view\ctl\act.php' 文件而已;

(參數傳遞的實現留意下extract() 方法,它和compact()方法一樣在開發中非常好用)

部分代碼:

    public function fetch($file = "",$assign = []){
        // 獲取路由
        $route = Router::getInstance();
        // 目錄
        $view_dir = APP_PATH . "view" . DS . $route->controller . DS;

        // 路徑
        $view_path = ! $file
            ? $view_dir . $route->action . ".php"
            : $view_dir . $file . ".php";

        // 參數傳遞
        extract($assign);

        is_file($view_path) ? require ($view_path) : exit($view_path . "文件不存在");
    }

添枝加葉

通過 1,2,3 步驟其實已經搭建出框架的基本結構,以下僅爲添枝加葉:

a. 加載公共方法庫

a. 將解析路由代碼封裝成類/system/library/Router.php,於 App::run() 方法調用

a. 創建數據庫類/system/library/Db.php,(僅繼承mysqli類,其它功能待實現)

a. 封裝配置類/system/library/Config.php,實現加載配置規則。

 以下是全部的文件👇

www  WEB部署目錄
├─application               應用目錄
│  ├─controller             控制器目錄
│  ├─view                   視圖目錄
│  │   ├─ctl                控制器對應目錄
│  │   │   ├─act.php        對應視圖文件
│  │   │   └─ ...           更多視圖文件
│  │   └─ ...               更多控制器對應目錄
│  ├─common.php             公共函數文件
│  ├─config.php             自定義配置文件
├─config                    應用配置目錄
│  ├─app.php                應用配置
│  ├─database.php           數據庫配置
├─public                    對外訪問目錄
│  ├─index.php              入口文件
│  ├─.htaccess              用於apache的重寫
├─system                    框架系統目錄
│  ├─library                框架類庫目錄
│  │   ├─App.php            啓動類庫
│  │   ├─Cache.php          緩存類庫
│  │   ├─Config.php         配置類庫
│  │   ├─Controller.php     控制器父類
│  │   ├─Db.php             數據庫類庫
│  │   ├─Log.php            日誌類庫
│  │   ├─Mysql.php          mysqli基礎類庫
│  │   ├─Router.php         路由類庫
│  │   ├─Singleton.php      單例 Trait 類(多繼承)
│  ├─base.php               基礎定義文件
│  ├─function.php           框架內置函數庫
├─vendor                    第三方類庫目錄Composer依賴庫
├─composer.json             composer 定義文件
├─README.md                 README 文件

框架簡單粗暴,代碼易讀易擴展,性能接近原生,需要擴展功能直接封裝或 composer 引用開源代碼。

Git倉庫地址:https://gitee.com/zhongbaitong/mini-frame.git 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章