• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

JFramework: 全自动的php框架

原作者: [db:作者] 来自: 网络 收藏 邀请

基于配置的PHP快速框架(含后台)。

你只要关心逻辑业务,页面和数据库操作我们替你封装好了。

项目简介

这个项目,前前后后整理了3、4年。目的只有一个,就是精致简单。


只要特点

  1. 整个框架代码清晰简单
  2. 适当使用设计模式提高代码质量
  3. 通过配置就能实现通用增删查改的界面和业务逻辑

这个比较适合不太会前端的php程序员独立完成的项目。存在一下问题:

  1. 没有通过详尽测试
  2. 没有经过复杂的压力测试
  3. 作者没有在大厂经过系统训练

基于配置

基于配置:只一个配置文件,就可以实现一个模块。

  1. 不同于基于脚手架的常见框架,需要自己重复写增删改语句模块或者通过工具生成相关语句,本框架甚至可以不生成任何模块代码。
  2. 不只是基于模板的显示,前后台可能只有一两个模板文件。

快速框架

只要用过类thinkphp的国内php大牛框架的,都会用。

常见的php框架功能,本框架基本都具备。


实现原理

具体的算法思路主要包括依赖倒置、模式元素、意图调起、洋葱中间件、灵活路由、编码特点


编码特点

  1. 各功能组件间相互独立
  2. 不使用静态类和全局变量

框架运行流程

这是框架运行流程图

框架流程

框架的整个运行流程就是意图的处理过程。

内核是个容器级联配置管理器

容器自动按照依赖返回合适的服务对象

级联配置管理器内核-应用-模块级联配置,控制器方法通过模块获取配置信息。配置可继承式覆盖,对配置的修改只响应在对应级别。


意图调起

内核启动过后,会生成一个特殊的请求意图,并把自己包装在意图中传递。

意图 包含一个命令,意图会通过路由解析这个命令,然后执行命令。

意图通过自己内置的内核来调用路由服务

请求意图是个特殊意图,它在调用路由解析前会调用请求管理器来填充自己的命令。然后在意图处理流程结束后调用响应器发送响应。


简约的自定义路由

路由会解析意图的命令,将其分解为传统的模块-控制器-动作-参数组合

路由解析原理:

//按照 /: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

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap