搭建了一个自用的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 

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