代码简单,功能简便,PHP 新手也能看懂。
以下是搭建过程做的一个小记录:
1. 使用 composer 实现文件自动加载
比起 spl_autoload_register() ,显然 composer 更简单跟强大,
2. 路由解析
实现访问 http://domain.com/index.php/index/index 时指向 /appliction/controller/Index.php 的 index()方法
其实只是通过 $_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 引用开源代码。