基于配置的PHP快速框架(含后台)。你只要关心逻辑业务,页面和数据库操作我们替你封装好了。
项目简介这个项目,前前后后整理了3、4年。目的只有一个,就是精致简单。
只要特点- 整个框架代码清晰简单
- 适当使用设计模式提高代码质量
- 通过配置就能实现通用增删查改的界面和业务逻辑
这个比较适合不太会前端的php程序员独立完成的项目。存在一下问题: - 没有通过详尽测试
- 没有经过复杂的压力测试
- 作者没有在大厂经过系统训练
基于配置基于配置:只一个配置文件,就可以实现一个模块。
- 不同于基于脚手架的常见框架,需要自己重复写增删改语句模块或者通过工具生成相关语句,本框架甚至可以不生成任何模块代码。
- 不只是基于模板的显示,前后台可能只有一两个模板文件。
快速框架只要用过类thinkphp的国内php大牛框架的,都会用。
常见的php框架功能,本框架基本都具备。
实现原理具体的算法思路主要包括依赖倒置、模式元素、意图调起、洋葱中间件、灵活路由、编码特点
编码特点- 各功能组件间相互独立
- 不使用静态类和全局变量
框架运行流程这是框架运行流程图 框架的整个运行流程就是意图的处理过程。
内核 是个容器 和级联配置管理器 。
容器 自动按照依赖返回合适的服务对象
级联配置管理器 内核-应用-模块级联配置,控制器方法通过模块获取配置信息。配置可继承式覆盖,对配置的修改只响应在对应级别。
意图调起内核启动过后,会生成一个特殊的请求意图,并把自己包装在意图中传递。 意图 包含一个命令,意图会通过路由解析这个命令,然后执行命令。
意图通过自己内置的内核来调用路由服务
请求意图 是个特殊意图,它在调用路由解析前会调用请求管理器来填充自己的命令。然后在意图处理流程结束后调用响应器发送响应。
简约的自定义路由路由 会解析意图 的命令,将其分解为传统的模块-控制器-动作-参数 组合
路由解析原理: //按照 /: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 为内置 路由元
路由元可以自定义 [ 'module' => '[A-Za-z]+', 'controller' => '[A-Za-z]+', 'action' => '[A-Za-z]+', 'id' => '[0-9]+',]; 路由单元 的定义如下 [':module/word/:action' => ['controller'=>'hello']];// 匹配 say/word/again 后结果为 [ 'module' => 'say', 'controller'=> 'hello', 'action' => 'again'];// 不匹配 say/hi/again, say/word/123
洋葱中间件意图在控制器中被流行的洋葱中间件流水线处理。面向切面的编程? 意图在执行过程中可以调起其他意图来获取所需信息。
安全起见,控制器的业务流程方法最好是私有的,不建议直接调用,应该通过意图
中间件可以通过获取意图中的内核来完成很多事。这样就不需要内核全局变量,也是代码更清晰通用。
模式元素框架的另一个核心是通过模式元素来定义模块,从而实现不需要代码就能完成常见模快的功能。 // 元素的定义$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 |
请发表评论