phpk框架簡介
PHPK是一個簡單易用,易於擴展的輕量級PHP框架。phpk不僅僅是一個php框架,也是一個js框架,內置一套全新的js內庫,完全摒棄了龐大的jquery,所有的前端都是一個全新的微世界。運行高效而不失功能強大,操作靈活而又能擴展自如。作為PHP框架里的“后起之秀”,PHPK秉承了那些優秀的PHP框架所共有的,並進行了很多微創新。
功能說明
- OOP編寫風格,完全依據面向對象的思想編寫
- 多項目管理,共享數據緩存層
- 自動壓縮js和css文件
- 內嵌一個js微型內核,易於擴展
- URL路由,支持3種路由模式
- hook鈎子操作,支持系統內核外擴展
- 助手函數,支持外圍函數擴展
- 模版視圖,模版引擎支持視圖,支持本地緩存
- wedgit,支持單獨的區塊加載
- 插件機制,可以很方面的引用第三方類庫
- 多語言,支持多語言擴展
- 多種加密方式
- 多緩存機制
- 多種數據庫引擎
- 支持分布式
- 多權限認證機制
- 支持自動偵測是wap還是web瀏覽
- 支持自動偵測客戶端語言
使用說明
一、如何調用?
把phpk文件夾下載到本地,然后在phpk文件夾上層建立index.php,里面代碼如下:
<?php include './phpk/base.php'; ?>
然后訪問index.php,然后你就會看到“歡迎使用phpk框架!”
二、如何配置?
如果第一步訪問成功,你就會在項目的根目錄發現多了幾個文件夾,分別是plugins、data、projects、projects/www。當然還有根目錄下的config.inc.php,這個文件是項目總配置文件,代碼如下:
<?php
//全局配置聲明在這個文件中.
$CONFIG['system']['db']['driver'] = 'mysql';//數據庫類型
$CONFIG['system']['db']['charset'] = 'utf8';//數據庫編碼
$CONFIG['system']['db']['prefix'] = 'ig_';//表名前綴
$CONFIG['system']['db']['master']['host'] = 'localhost';//主庫地址
$CONFIG['system']['db']['master']['database'] = 'itest';//數據庫名稱
$CONFIG['system']['db']['master']['port'] = '3306';//默認端口
$CONFIG['system']['db']['master']['user'] = 'root';//數據庫帳號
$CONFIG['system']['db']['master']['password'] = '123456';//數據庫密碼
$CONFIG['system']['app']['allow_dir'] = array("www","wap","admin","tools");//系統允許的應用
$CONFIG['system']['app']['auto_detect'] = 1; //是否自動偵測是wap還是web
$CONFIG['system']['app']['defalut_web_path'] = 'www';//默認的應用目錄
$CONFIG['system']['app']['defalut_wap_path'] = 'wap';//默認的手機應用目錄
$CONFIG['system']['security'] = '_phpk_@#!%DFDS_'; // 系統的加密字符串
$CONFIG['language']['switch_on'] = 1; //是否打開語言包
$CONFIG['language']['default_lang'] = 'zh-cn';//默認語言
$CONFIG['language']['auto_detect'] = 1; //是否自動偵測語言
$CONFIG['language']['get_var'] = 'lang'; //前端get獲取語言包的字符
$CONFIG['language']['lang_list'] = 'zh-cn';//語言包列表,用逗號隔開
在projects/www文件夾下面也會多出一個項目配置文件config.inc.php,代碼如下:
<?php
//項目配置聲明在這個文件中.
$CONFIG['debug'] = 1; // 項目的調試模式,1為打開,0為關閉
$CONFIG['route']['url_type'] = 2; // url模式,1為字符串模式,2為pathinfo模式
$CONFIG['route']['default_controller'] = 'index'; // 默認控制器文件
$CONFIG['route']['default_action'] = 'index'; // 默認action接口
$CONFIG['output']['charset'] = 'utf-8'; // 頁面字符集
$CONFIG['output']['errorlog'] = 0; // 是否記錄錯誤日志
$CONFIG['output']['forceheader'] = 0; // 強制輸出頁面字符集,用於避免某些環境亂碼,0為關閉,1為開啟
$CONFIG['output']['gzip'] = 0; // 是否采用 Gzip 壓縮輸出
$CONFIG['output']['tmpl_cache'] = 0; // 是否開啟模版緩存,0為內存輸出做調試模式用,1為檢測緩存輸出做開發模式用,2為調用緩存輸出,3做正式環境用
$CONFIG['output']['layout_on'] = 1; // 是否開啟布局,0為關閉,1為開啟
$CONFIG['output']['layout_name'] = 'layout'; // 布局的文件
$CONFIG['output']['layout_item'] = '{_content}'; // 布局的內部替換的標簽名稱
$CONFIG['output']['tmpl_suffix'] = '.php'; // 模版的后綴
$CONFIG['output']['default_tmpl'] = 'default'; // 默認模版目錄
$CONFIG['output']['csszip'] = 1; // 是否壓縮css文件,1為壓縮,0為不壓縮
$CONFIG['output']['jszip'] = 1; // 是否壓縮js文件,1為壓縮,0為不壓縮
$CONFIG['loader']['libs'] = array(); // 是否加載外圍的類
$CONFIG['loader']['helpers'] = array(); // 是否加載外圍函數
$CONFIG['loader']['hooks'] = array(); // 是否加載鈎子
$CONFIG['session']['prefix'] = 'pk_'; // session的前綴
$CONFIG['session']['id'] = 'phpk'; // session的id
$CONFIG['session']['expire'] = 1200; // session的超時時間
$CONFIG['session']['auto_start'] = 1; // 是否自啟動session,1為開啟,0為關閉
$CONFIG['cookie']['prefix'] = 'pk_'; // cookie的前綴
$CONFIG['cookie']['path'] = '/'; // cookie的有效路徑
$CONFIG['cookie']['expire'] = 1200; // cookie的超時時間
$CONFIG['cookie']['domain'] = ''; // cookie的作用域
$CONFIG['cache']['type'] = 'file'; // 緩存類型
$CONFIG['cache']['table'] = 'tb_cache'; // 緩存表的名稱
$CONFIG['cache']['prefix'] = 'cache_'; // 緩存前綴
$CONFIG['cache']['time'] = 3600; // 緩存過期時間
$CONFIG['cache']['check'] = true; // 是否進行緩存的數據校驗
$CONFIG['cache']['compress'] = true; // 是否緩存壓縮
$CONFIG['auth']['auth_on'] = 1; //是否啟動權限認證
$CONFIG['auth']['auth_type'] = 'phpk'; //權限認證方式
項目配置文件繼承了項目總配置文件,也可以對項目總配置文件重寫。這樣做的好處是,增加了項目的靈活性。
三、如何使用模版?
首先要寫controller文件,在projects/www/controllers/indexController.class.php文件夾里,這樣寫:
<?php
class IndexController extends Controller
{
function index ()
{
$welcome = "歡迎使用phpk框架!";
$this->assign('welcome', $welcome);
$this->display('welcome');
}
}
模版文件支持layout,可以在projects/www/views/layouts/layout.php這樣寫,(這個文件的名字可以在項目里配置,也可以單獨指定)
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title><?php echo $welcome;?></title>
</head>
<body>
{_content}
</body>
</html>
然后在projects/www/views/default/index.php模版文件里這樣寫:
<?php echo $welcome;?>
phpk模版支持js和css簡寫調用:
{css cssfile1,cssfile2}
{js jsfile1,jsfile2}
也支持一些靜態調用方法,比如:{img}{js}{css}{pro}{url}{public}等,盡量做到簡單、精簡、規范。
phpk的內置模版引擎可以不用本地緩存,直接內存輸出,也可以在項目完成后直接調用緩存文件。
四、如何數據查詢?
phpk框架摒棄了一般框架的orm(關系數據庫映射),讓用戶更加容易上手。下面是一個模型用例(projects/www/model/indexModel.class.php):
<?php
class IndexModel extends Model{
/**
* 檢測用戶名
* @param string $username
* @param string $password
* @return multitype:
*/
function checkUser($username,$password){
$sql = "select uid,username,group_id from tb_user where username='$username' and password='$password'";
return $this->select($sql,1);
}
/**
* 更新用戶登錄信息
* @param int $uid
*/
function updateUser($uid,$arr = array()){
$data = array('last_login_time'=>time(),'last_login_ip'=>getIp());
$result = array_merge($data, $arr);
$this->update("tb_user", $result,"uid='$uid'");
}
}
五、如何使用鈎子、助手函數和外圍庫?
phpk框架沿用了codeigniter的鈎子思想,借鑒了thinkphp的行為體系,堅持易用簡單的原則。配置鈎子,首先需要在項目配置文件里加上:
$CONFIG['loader']['hooks'] = array(
'pre_controller' => 'auth'
); // 是否加載鈎子
key值參考下面的說明:
* pre_system
* 系統執行的早期調用.僅僅在系統類和配置項加載完畢的時候. 沒有執行路由或者其它的過程.
* pre_controller
* 在調用你的任何控制器之前調用.此時所用的基礎類,路由選擇和安全性檢查都已完成.
* post_controller_constructor
* 在你的控制器實例化之后,任何方法調用之前調用,傳入的參數為實例化的控制器。
* post_controller
* 在你的控制器完全運行之后調用,傳入的參數為實例化的控制器。
* display_override
* output.tmpl_cache=0時截取調試模式下的模版, 用來在系統執行末尾向web瀏覽器發送最終頁面,傳入參數為解析后的模版內容。調用后記得exit。
* cache_override
* 截取cache模式下的模版,這可以讓你使用自己的方法來顯示緩存文件,傳入參數為解析后的緩存文件。調用后記得exit。
* post_system
* 在最終着色頁面發送到瀏覽器之后,瀏覽器接收完最終數據的系統執行末尾調用
value值為需要加載的文件名,hook的文件放在projects/controllers/hooks/authHook.class.php
助手文件和外圍庫的加載更加簡單,只需要這樣寫配置文件即可:
$CONFIG['loader']['libs'] = array('html','csv'); // 是否加載外圍的類
$CONFIG['loader']['helpers'] = array('dir','str'); // 是否加載外圍函數
當然你也可以擴展自己的助手文件和類庫,把他們分別放在extensions/functions/和extensions/classes/里面,系統會先判斷項目加載文件是否存在,然后再去判斷系統內核文件。
發布地址
下載地址:http://code.taobao.org/p/phpk/file/2590/phpk.rar
SVN地址: http://code.taobao.org/p/phpk/src/
項目交流群:61591845
