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