ES 是一款 极简,灵活, 高性能,扩建性强 的php 框架。 未开源以前在商业公司 经历数年,数个高并发网站 实践使用!php
整个框架核心四个文件,全部文件加起来放在一块儿总行数不超过400 行 html
|--src //受保护代码文件夹 |--lib |--es.php //启动文件 |--controller.php //控制器文件 |--model.php //模型文件 |--view.php //视图引擎 |--controller //控制器业务文件 |--view //视图文件 |--model //模型通常小型业务能够省略,数据操做直接放到controller |--config.php //全局配置文件,业务相关的配置也能够放这里,或者本身创建一个独立的配置文件index.php 文件引用 |--res //静态资源 |--index.php //入口文件
ES 没有像些重型框架单独有 Route 配置, ES的想法很简单,主要分为 模块[m],控制器[c],动做[c] 来路由前端
'rewrite' => array( //设置模块 碰到 http://{host}/admin/ 认为进入了后台模块 数组 0 标识默认 m 'm'=>['web','admin','app','api'], 'c'=>'main', //controller 默认值 'a'=>'index', //action 默认值, 'isRewrite'=> TRUE //是否开启伪静态 .htaccess 文件配置 ),
其中 m 为模块,通常咱们开发小型web系统时候,后台(admin)、前端(web)、接口(api) 来划分结构; 大型一点的web系统,常根据业务进行模块划分,好比
shop、order、user 等等模块划分。 实际划分就对应着 controller view 里面的文件夹的安排,通常的 一个模块对应其下面的一个文件夹,这样清晰的管理模块
方便协做开发和解耦mysql
另外 配置中 m=>[api..] 数组就是划分的模块,对应地址栏会去选择 www.baidu.com/admin/con/index 域名部分后面的第一个 /admin/ 若是在配置中就表示为识别到的模块, 否者将模块默认为 m[0]
实现代码能够参考 es:git
$rewrite = $GLOBALS['rewrite']; if ($rewrite['isRewrite']) { $route = explode("/", $_SERVER['PHP_SELF']); if (!empty($rule[1])) { if (in_array($rule[1], $rewrite['m'])) { $_GET['m'] = $route[1]; list($_GET['c'], $_GET['a']) = array_slice($route, 2, 3); } else { $_GET['m'] = $rewrite['m'][0]; list($_GET['c'], $_GET['a']) = array_slice($route, 1, 2); } } }
数据库目前支持mysqlgithub
$dbb = array( 'mysql' => [ //主库 'master'=>[ 'MYSQL_HOST' => '127.0.0.1', 'MYSQL_PORT' => '3306', 'MYSQL_USER' => 'root', 'MYSQL_DB' => 'db_demo', 'MYSQL_PASS' => '123456', 'MYSQL_CHARSET' => 'utf8', ], //从库能够加入多个实例 'slave'=>[ 'MYSQL_HOST' => '127.0.0.1', 'MYSQL_PORT' => '3306', 'MYSQL_USER' => 'root', 'MYSQL_DB' => 'db_demo', 'MYSQL_PASS' => '123456', 'MYSQL_CHARSET' => 'utf8', ] ], 'prefix' => 'mo_', );
自定义的业务方面的配置,能够本身定义个配置文件,在config.php 进行引入,也能够直接在config.php 进行修改配置,后面使用所有用web
$GLOBALS = require(APP_PATH . '../config.php');
$GLOBALS 全局 数组配置进行获取相应的配置项。redis
控制器 (Get, Post , Head , Put http)+$_Get['a'] 的函数,直接暴露给了请求,请求能够经过
$_GET['a'] 直接调用,若是么没有指定相应http 动做时间,直接调用 public action+$_GET['a'] 的函数
好比 客户端get请求sql
/api/main/index 会路由到 controller/api/mainController.php 文件 下面 的 public function getIndex(){} 函数,若是此函数不存在,会找个 public function actionIndex(){} 函数
另外在写http 接口时候咱们能够直接 Restful api 格式用http 请求自动对应
好比shell
/api/good 会路由到 controller/api/goodController.php 文件 下面 的 public function get(){} 函数 public function post(){} 函数 ....已至restful Api接口写法
//获取视图数据源的值 public function __get ($name) //此函数设置的值能够在视图模板里直接使用 public function __set ($name, $value) //处理,好比修改 添加 数据成功时候须要返回列表页, $msg 弹出的提示内容, $url 为列表页面的地址 public function success ($msg, $url) //跟success 函数对应,直接返回上次操做页面,好比添加保存成功 再调回到添加页面 public function history ($msg) //处理 action对应的模板 $tpl_name 模板地址 会自定到view 和controller 同名的文件夹 public function display ($tpl_name, $return = false)
baseController 在每一个模块里面有父类,继承系统核心Controller 主要用来处理
es 数据库操做使用PDO pdo 自己对数据库操做,参数化,防治sql诸如, 请在使用元素sql 语句查询的时候,不要直接拼凑字符串。
public function setDB($db_config_key = 'default', $is_readonly = false) $userDb = new Model('user'); //设置如下操做使用 sale0 实例 $userDb->setDb('sale0', true); $user->...
//查询user表数据 $userDb = new Model("user"); /** 查询数据返回数据数组集合 * @param array 查询条件能够是数组,也能够直接是字符串 好比 ['id'=>1] 等效 "and id = 1" * @param null 排序 如 " id desc" * @param string 查詢表字段 * @param null $limit 这个参数比较关键,若是这个参数不为空将 能够分页 * @return mixed */ public function findAll ($conditions = array(), $sort = null, $fields = '*', $limit = null) //分页查询 $userData = $userDb->findAll('id> 1', 'id desc', '*', 10) //执行为上面的语句后 $userDb->page 返回一个分页数组,模板里面能够根据这个数组去作必定处理 通常状况BaseController 自定义个函数来拼凑html 显示 或者直接 是先后端分离 json 直接打印给前端处理 //查询单条数据 public function find ($conditions = array(), $sort = null, $fields = '*') //sql 直接查询 public function query($sql, $params = array()) $user = $userDb->query("select * from mo_user where id=? ", ['id'=>1]); //查询统计量等同于 sum($field) 返回直接返回整型 public function findSum($conditions, $field) //查询统计量等同于 count(1) 返回直接返回整型 public function findCount($conditions)
/** 表插入记录 * @param $row * @return mixed */ public function create($row); 演示 $userDb = new Model('user'); $userDb->create( ['username'=>'es', 'password'=>'123456', 'sex'=>1 ] );
/** * @param 查询条件 * @param 更加的数据 * @return mixed */ public function update($conditions, $row) $userDb->update( ['id'=>1], ['username'=>'es', 'password'=>'123456', 'sex'=>1 ] );
//按条件删除数据 public function delete($conditions) $userDb = new Model('user'); $userDb->delete(['id'=>1]);
es 采用php原始 脚本做为模板标记语言, 主要好处有
php 原始脚本,只不过模板里面可以使用的变量 只能来源controller __set 所设置的变量 保证模板使用的数据安全,按需所给。
母版
引入母版机制(具体参考案例)
html <?php include $_view_obj->compile($__template_file); ?>
es 自己最求灵活,极简单,全部没有引入其余重型模板的功能点,好比cache, 连接redis 等等,那么使用者,若是须要
相关功能怎么办能
步骤以下:
'plugins'=>['include','plugin'] //扩展目录
class P { public function test(){ return '扩展'; } }
$p = new P(); $p->test()
//能处理shell 请求 if (!empty($argc)) { $_POST['m'] = $argv[1]; $_POST['c'] = $argv[2]; $_POST['a'] = $argv[3]; } $ php index.php m c a
crm系统 https://github.com/Echosong/es_crm
313690636@qq.com
;313690636
、微信:echosongfeigang
。https://github.com/Echosong/ES