# JFramework **Repository Path**: bfgdqch/JFramework ## Basic Information - **Project Name**: JFramework - **Description**: 全自动的php框架 - **Primary Language**: PHP - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 5 - **Forks**: 1 - **Created**: 2015-10-01 - **Last Updated**: 2025-04-02 ## Categories & Tags **Categories**: webframework **Tags**: None ## README # 基于配置的PHP快速框架(含后台)。 > 你只要关心逻辑业务,页面和数据库操作我们替你封装好了。 ## 项目简介 这个项目,前前后后整理了3、4年。目的只有一个,就是精致简单。 --- ### 只要特点 1. 整个框架代码清晰简单 2. 适当使用设计模式提高代码质量 3. 通过配置就能实现通用增删查改的界面和业务逻辑 这个比较适合不太会前端的php程序员独立完成的项目。存在一下问题: 1. 没有通过详尽测试 2. 没有经过复杂的压力测试 3. 作者没有在大厂经过系统训练 --- ### 基于配置 > 基于配置:只一个配置文件,就可以实现一个模块。 1. 不同于基于脚手架的常见框架,需要自己重复写增删改语句模块或者通过工具生成相关语句,本框架甚至可以不生成任何模块代码。 2. 不只是基于模板的显示,前后台可能只有一两个模板文件。 --- ### 快速框架 > 只要用过类thinkphp的国内php大牛框架的,都会用。 常见的php框架功能,本框架基本都具备。 --- ## 实现原理 具体的算法思路主要包括依赖倒置、模式元素、意图调起、洋葱中间件、灵活路由、编码特点 --- ### 编码特点 1. 各功能组件间相互独立 2. 不使用静态类和全局变量 --- ### 框架运行流程 这是框架运行流程图 ![框架流程](https://images.gitee.com/uploads/images/2019/0715/221608_5cd7e9ef_45533.png "捕获.PNG") > 框架的整个运行流程就是意图的处理过程。 `内核`是个`容器`和`级联配置管理器`。 `容器`自动按照依赖返回合适的服务对象 `级联配置管理器`内核-应用-模块级联配置,控制器方法通过模块获取配置信息。 配置可继承式覆盖,对配置的修改只响应在对应级别。 --- ### 意图调起 内核启动过后,会生成一个特殊的请求意图,并把自己包装在意图中传递。 `意图` 包含一个命令,意图会通过路由解析这个命令,然后执行命令。 > 意图通过自己内置的内核来调用路由服务 `请求意图`是个特殊意图,它在调用路由解析前会调用请求管理器来填充自己的命令。 然后在意图处理流程结束后调用响应器发送响应。 --- ### 简约的自定义路由 `路由`会解析`意图`的命令,将其分解为传统的`模块-控制器-动作-参数`组合 路由解析原理: ``` //按照 /:module/:controller/:action/:params => [] /index/index/index/arg/value/param/value // 解析为 [ module => index controller => index action => index arg => value param => value ] ``` 路由的定义由路由元、和路由单元组成。 > `:module`、`:controller`、`:action`、`:params` 为内置 **路由元** 路由元可以自定义 ```php [ 'module' => '[A-Za-z]+', 'controller' => '[A-Za-z]+', 'action' => '[A-Za-z]+', 'id' => '[0-9]+', ]; ``` **路由单元** 的定义如下 ```php [':module/word/:action' => ['controller'=>'hello']]; // 匹配 say/word/again 后结果为 [ 'module' => 'say', 'controller'=> 'hello', 'action' => 'again' ]; // 不匹配 say/hi/again, say/word/123 ``` --- ### 洋葱中间件 意图在控制器中被流行的洋葱中间件流水线处理。面向切面的编程? > 意图在执行过程中可以调起其他意图来获取所需信息。 > 安全起见,控制器的业务流程方法最好是私有的,不建议直接调用,应该通过意图 中间件可以通过获取意图中的内核来完成很多事。这样就不需要内核全局变量, 也是代码更清晰通用。 --- ### 模式元素 框架的另一个核心是通过模式元素来定义模块, 从而实现不需要代码就能完成常见模快的功能。 ```php // 元素的定义 $element = [ 'name' => 'name', 'label' => 'name', 'field' => 'name', 'column' => 'name', 'type' => 'int', 'holder' => 'int', 'view' => 'input', 'rules' => [ [], [] ], 'display' => [], ]; // 集合的定义 $collection = [ 'name' => 'student', 'label' => 'student', 'table' => 'student', 'form' => 'student', 'validator' => [], 'mate' => [], 'elements' => [] ]; // 模块的定义 $module = [ 'name' => 'school', 'mate' => [], 'collections' => [], 'controllers' => [ // ... 'actions' => [] // ... ] ]; ``` --- ### 依赖倒置 依赖倒置通过内核中的容器来实现。容器加载类默认通过加载器实现,当然你可以用Composer。 `加载器`支持命名空间到路径的映射 ``` [ 'J' => DIR ] class \J\A\B => file DIR/J/A/B.php ```