# mymvc 从零建MVC框架 # 框架简单思路 1. 接收,打印参数想怎么弄。如 获取配置文件的方法,根据传过来的参数 构想 2. 一般都是先判断文件是否存在。存在就该include就include,该new就new。然后做存到属性中(做缓存) 3. 主要是调用流程:都什么需要放到run方法中 # 具体过程 ## 一 框架启动文件(start.php) * 1.定义全局常量(define)(包括环境常量) * 2.注册自动加载 * 3.调用 run 方法 ## 二 路由文件(Route.php) * 解析 url 获取 model, controller, action 将多余部分转入 get 参数 ## 三 加载配置文件 * 目前只用框架的config.php 未开始模快配置文件, Config 有静态 set 方法可以添改设置 ## 四 找到controller 并实例化, 调用方法 ## 五 处理并输出结果 * 使用 Response 类处理输出结果 > 以上就是该简单框架运行过程, 还没有添加日志, 数据库等过程, 这些后面再慢慢加 # 框架开发文档 ## 目录结构 初始的目录结构如下: ~~~ www WEB部署目录(或者子目录) ├─application 应用目录(可以更改) │ ├─module_name 模块目录 │ │ ├─controller 控制器目录 │ │ ├─model 模型目录 │ │ └─view 视图目录 ├─daswork 框架系统目录 │ ├─main 框架类库目录 │ │ ├─common 公共函数库 │ │ ├─db 数据驱动库 │ │ ├─response 响应类库 │ │ ├─App.php 项目运行类 │ │ ├─Config.php 设置类 │ │ ├─Controller.php 控制器类 │ │ ├─Loader.php 加载类 │ │ ├─Model.php 模型类 │ │ ├─Response.php 响应类 │ │ ├─Route.php 路由类 │ │ ├─Session.php session类 │ │ ├─SqliteModel.php Sqlite类(后面会合并移数据驱动库) │ │ └─View.php 视图类 │ ├─config.php 框架惯例配置文件 │ ├─helper.php 助手函数文件 │ ├─service.php PHP web service 处理url, 实现'mod_rewrite'功能 │ └─start.php 框架入口文件 ├─public WEB目录(对外访问目录) │ ├─favicon.ico 图标 │ └─index.php 入口文件 ├─extend 扩展类库目录 ├─runtime 应用的运行时目录(可写,可定制) ├─vendor 第三方类库目录(Composer依赖库) ├─build.php 自动生成定义文件(参考) ├─composer.json composer 定义文件 ├─LICENSE.txt 授权说明文件 ├─README.md README 文件 ├─start.bat 项目启动脚本(win) ├─start.sh 项目启动脚本(unix) ~~~ > 项目可以使用php 内置的web service, 需要 path_info, 参考 laravel 的方法 ```php $uri = urldecode( parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH) ); // 这个文件允许我们从内置 PHP web 服务器中模拟 Apache 的 "mod_rewrite" 功能. // 这提供了一种测试 Laravel 应用程序的便捷方法, // 而无需在此安装"真正的" web 服务器软件。 if ($uri !== '/' && file_exists(__DIR__.'/public'.$uri)) { return false; } require_once __DIR__.'/public/index.php'; ``` > 启动脚本 ```sh cd ./public php -S localhost:8000 ../daswork/service.php ``` ## 框架类库(\daswork\mian) ### App.php 主要是 run 方法: 新建路由对象 找到控制器 执行方法 输出结果 ```mermaid graph LR A[方形] -->B(圆角) B --> C{条件a} C -->|a=1| D[结果1] C -->|a=2| E[结果2] F[横向流程图] ``` ### Config.php