Documents
原理: 引入模板引擎类,根据其语法规范,将网页制作成模板文件。
规范:
1. 一套模板风格以一个目录名放在View目录下;
2. 模板名称组成: 控制器名_功能名.html 例如user_closet.html
注意事项:
1.模板的开发规范根据不用模板引擎而不同。
2.KFC会将一些全局变量自动赋值到模板文件中以供使用,这些全局变量为:网站基本信息 $GLOBALS['gSiteInfo']和 语言包$GLOBALS['gLang']
范例:
使用phpTemplate引擎的模板:
header.html文件
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=<?=$webcharset?>" />
<title><?=$site_name?></title>
<link rel="stylesheet" href="<?=$image_site_url?>/css/personal.css" type="text/css" />
</head>
其他文件
<? include "header.html";?>
<div class="menu">
<ul>
<li><a href="?action=defaults&view=defaults" id="menu1" class="menuvisited">显示资料</a></li>
<li><a href="?action=defaults&view=editinfo" id="menu2">修改资料</a></li>
<li><a href="?action=defaults&view=changepwd" id="menu3">修改密码</a></li>
</ul>
</div>
</div>
<div id="main">
<? include "left.html";?>
<div id="profileinfo">
<ul>
<li>用 户 名:<?=$loginuser['user_name']?></li>
<li>昵 称:<?=$loginuser['user_nickname']?></li>
<li>性 别:<? if($loginuser['user_gender']==0) echo "男生";if($loginuser['user_gender']==1) echo "女生";?></li>
<li>地 区:<?=$loginuser['user_city']?></li>
<li>保密邮箱:<?=$loginuser['user_email']?></li>
</ul>
</div>
</div>
</div>
</div>
<!--end content -->
<? include "footer.html";?>
规范:
1. 一套模板风格以一个目录名放在View目录下;
2. 模板名称组成: 控制器名_功能名.html 例如user_closet.html
注意事项:
1.模板的开发规范根据不用模板引擎而不同。
2.KFC会将一些全局变量自动赋值到模板文件中以供使用,这些全局变量为:网站基本信息 $GLOBALS['gSiteInfo']和 语言包$GLOBALS['gLang']
范例:
使用phpTemplate引擎的模板:
header.html文件
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=<?=$webcharset?>" />
<title><?=$site_name?></title>
<link rel="stylesheet" href="<?=$image_site_url?>/css/personal.css" type="text/css" />
</head>
其他文件
<? include "header.html";?>
<div class="menu">
<ul>
<li><a href="?action=defaults&view=defaults" id="menu1" class="menuvisited">显示资料</a></li>
<li><a href="?action=defaults&view=editinfo" id="menu2">修改资料</a></li>
<li><a href="?action=defaults&view=changepwd" id="menu3">修改密码</a></li>
</ul>
</div>
</div>
<div id="main">
<? include "left.html";?>
<div id="profileinfo">
<ul>
<li>用 户 名:<?=$loginuser['user_name']?></li>
<li>昵 称:<?=$loginuser['user_nickname']?></li>
<li>性 别:<? if($loginuser['user_gender']==0) echo "男生";if($loginuser['user_gender']==1) echo "女生";?></li>
<li>地 区:<?=$loginuser['user_city']?></li>
<li>保密邮箱:<?=$loginuser['user_email']?></li>
</ul>
</div>
</div>
</div>
</div>
<!--end content -->
<? include "footer.html";?>
原理: 分析业务逻辑,抽象出接口,开发底层的业务类,提供给控制层使用。
规范:
1. 模型文件命名为 foo.class.php;
2. 类名跟文件名"."号的最前头一致, class foo{};
API:
resource parent::dbConnect(array $options);
注意事项:
由于数据库操作类有多种选择adodb,peardb,pdo,database,所以开发人员要熟悉这些类的使用方法。
类书写范例
<?php
/*
* 需要数据库操作的要 继承 Model
*
*/
class UserWealthManage extends Model {
// php5 的写法
private $mydb="";
/**
* 选择php5 构造函数
*
*/
function __construct(){
$this->mydb = parent::dbConnect($GLOBALS['gDataBase1']);
}
/**
* 或者php4 构造函数,这里只是为了说明KFC框架类库本身兼容php4,php5,
* 但是应用项目最好采用php5的类规范来开发。
*
*/
function UserWealthManage(){
$this->mydb = parent::dbConnect($GLOBALS['gDataBase1']);
}
/**
* 获取用户
*@params int $user_id
*@return mixed
*/
function GetUserWealth($user_id){
$n=floor($user_id/100000);
$table = "user_".($n+1)."0w";
$query = "select * from $table where user_id=".$user_id;
$user_wealth = $this->mydb->getAll($query);
if($user_wealth!==false){
return $user_wealth;
}else{
return false;
}
}
/**
* 解析字符串
*@params string $str
*@return array
*/
function ParseItemStr($str){
if(!empty($str)){
if(substr($str,-1,1)==';') $str = substr($str,0,-1);
$arrs = array();
$array = array();
$arrs = explode(";",$str);
foreach ($arrs as $k=>$v){
$array[$k] = explode(",",$v);
}
unset($arrs);
return $array;
}
}
function __destruct(){
unset($this->mydb);
}
}
?>
轻量级数据库类database.class.php API
//初始化参数
class database($database_type,$host,$database,$user,$password,$port=false,$dsn=false);
//连接数据库
boolen connect(void);
//返回false 或者 连接资源
mixed query(string $sql_statement, array $array ='');
// 执行结果
boolen execute(string $sql_statement, array $array ='')
//返回根据从结果集取得的行生成的数组,如果没有更多行则返回 FALSE。
mixed fetchRow(resource $result)
//只返回一行
mixed getRow(resource $result);
// 取得结果集中行的数目
mixed countRows(resource result);
// 取得所有数据
array getAll(string $sql_statement, array $array ='');
<?php
// 应用举例
$db = new database($options['type'],$options['host'],$options['dbname'],$options['user'],
$options['passwd'],$options['port']);
// 获取结果
$result = $db->query("select * from user where user_id=?", array($user_id));
while($row = $db->fetchRow($result)){
$array[] = $row;
}
// 取得行数
$num = $db->countRow($result);
// 执行操作
$r = $db->execute("update user set user_name='ddd' where user_id='{$user_id}'");
if($r){
return true;
else
return false;
// 取得一行
$row = $db->getRow("select * from user where user_id=?", array($user_id));
// 取得所有
$array = $db->getAll("select * from user where 1");
?>
原理:利用面向对象的思维,将功能点定义为类的方法;将应用功能模块定义为一个类;
规范:
1. 控制器文件命名为 foo.class.php;
2. 类名跟文件名"."号的最前头一致,class foo{};
3. 类的方法命名采用"view_"或者"op_" 小写开头; 剩下功能描述部分(功能名)只能为大小写字母和数字组成,如view_home1 , op_saveForm
*不带view_和op_ 开头的类方法不会做为应用项目系统的权限点;
API 接口:
// 权限验证
void parent::authenticate();
// 引入业务模型
object $this->includeModel(string $model_name);
// 引入外部组件
object $this->addComponent($com_name);
// 赋值到模板,跟smarty一样
void $this->assign('var',$value);
// 显示模板
void $this->display($tpl_name);
// 显示提示信息
void show_message(string $message);
// 返回
void goback();
// 跳转到其他页面
void Redirect(string $url,int $type);
类书写范例
<?php
class foo extends Controller{
/**
* _constructor KFC自带的仿构造函数,会在类实例化时自动执行
* @access public
* @return void
*/
function _constructor(){
// 权限验证
parent::authenticate();
}
/**
* URL访问:?action=foo&view=home&var=1111
* @access public
* @return void
*/
function view_home(){
// 初始化外部变量
$var = isset($_GET['var'])?$_GET['var']:'';
// 引入业务模型
$userManage = $this->includeModel("UserManage");
$userinfo = $userManage->getUserInfo(22);
// 引入外部组件
$phpmailer = $this->addComponent('phpmailer');
// 赋值到模板,跟smarty一样
$this->assign("var",$var);
// 显示模板
$this->display("foo_home.html");
}
/**
* 处理POST提交的操作:在form表单需要插入
* <input type="hidden" name="action" value="foo">
* <input type="hidden" name="op" value="saveForm">
* @access public
* @return void
*/
function op_saveForm(){
// $KFC_POST 获取了$_POST的所有数据;
global $KFC_POST;
print_r($KFC_POST);
//....
// 实际业务编程
// 完成后需要跳转 几个内置函数可以参考使用
// 显示提示信息
show_message("操作成功!");
// 返回
goback();
// 相当于 show_message_goback("操作成功!");
//或者跳转到其他页面
//类型1 使用php的header;类型2 使用js的location.href;类型3 使用setTimeout跳转;
Redirect("http://www.google.cn",1);
}
function otherFunction(){
// 编程
return ;
}
}
?>
规范:
1. 控制器文件命名为 foo.class.php;
2. 类名跟文件名"."号的最前头一致,class foo{};
3. 类的方法命名采用"view_"或者"op_" 小写开头; 剩下功能描述部分(功能名)只能为大小写字母和数字组成,如view_home1 , op_saveForm
*不带view_和op_ 开头的类方法不会做为应用项目系统的权限点;
API 接口:
// 权限验证
void parent::authenticate();
// 引入业务模型
object $this->includeModel(string $model_name);
// 引入外部组件
object $this->addComponent($com_name);
// 赋值到模板,跟smarty一样
void $this->assign('var',$value);
// 显示模板
void $this->display($tpl_name);
// 显示提示信息
void show_message(string $message);
// 返回
void goback();
// 跳转到其他页面
void Redirect(string $url,int $type);
类书写范例
<?php
class foo extends Controller{
/**
* _constructor KFC自带的仿构造函数,会在类实例化时自动执行
* @access public
* @return void
*/
function _constructor(){
// 权限验证
parent::authenticate();
}
/**
* URL访问:?action=foo&view=home&var=1111
* @access public
* @return void
*/
function view_home(){
// 初始化外部变量
$var = isset($_GET['var'])?$_GET['var']:'';
// 引入业务模型
$userManage = $this->includeModel("UserManage");
$userinfo = $userManage->getUserInfo(22);
// 引入外部组件
$phpmailer = $this->addComponent('phpmailer');
// 赋值到模板,跟smarty一样
$this->assign("var",$var);
// 显示模板
$this->display("foo_home.html");
}
/**
* 处理POST提交的操作:在form表单需要插入
* <input type="hidden" name="action" value="foo">
* <input type="hidden" name="op" value="saveForm">
* @access public
* @return void
*/
function op_saveForm(){
// $KFC_POST 获取了$_POST的所有数据;
global $KFC_POST;
print_r($KFC_POST);
//....
// 实际业务编程
// 完成后需要跳转 几个内置函数可以参考使用
// 显示提示信息
show_message("操作成功!");
// 返回
goback();
// 相当于 show_message_goback("操作成功!");
//或者跳转到其他页面
//类型1 使用php的header;类型2 使用js的location.href;类型3 使用setTimeout跳转;
Redirect("http://www.google.cn",1);
}
function otherFunction(){
// 编程
return ;
}
}
?>
在用KFC的自动安装程序启动了项目之后,在根目录下会出现应用项目名称,控制器目录Controllers下有一个默认文件defaults.class.php,里面有hello world举例存在。本文要描述的是如何手动启动KFC的应用项目。
第一步:在网站根目录下,首先将整个KFC框架拷贝过来,然后分别创建目录Controllers(控制器),Models(业务模型),Views(模板视图),tmp(缓存目录),Languages(语言包目录),public(公共目录),Plugins(外部插件目录)。
在public目录下再分别创建目录flashs,images,javascripts,stylesheets,htmls,这些目录将存放全站共享的静态文件。
第二步:创建配置文件config.ini.php,代码如下:
<?php
//Application
//use dev, online
define("APP_STATUS", 'dev');
// define application directory
define("APP_DIR", dirname(__file__));
// define systems KFC directory, it can be relative
define('KFC_DIR', APP_DIR . "/KFC");
// define language
define("APP_LANG",'en');
// use database or not
define("USE_DATABASE",0);
// define session save handle (file, mysql, memcache)
define("SESSION_HANDLE",'file');
// turns off access to post variables through anything
define('HIDE_POST', 1);
// disallow spaces in url parameters, helps prevent sql injection.
define('STRIP_URL_VARS' ,1);
//Global-Site Settings
$GLOBALS['gSiteInfo']['site_name'] = 'KFC Demo';
$GLOBALS['gSiteInfo']['version'] = 'v1.0';
$GLOBALS['gSiteInfo']['site_url'] = 'http://localhost/';
$GLOBALS['gSiteInfo']['site_title'] = "KFC PHP Framework";
$GLOBALS['gSiteInfo']['webcharset'] = 'utf-8';
$GLOBALS['gSiteInfo']['pagenum'] = 15;
?>
第三步:创建一个入口文件index.php,代码如下:
<?php
include(dirname(__file__) . "/config.ini.php");
include(KFC_DIR . "/KFC.php");
$start_time = getmicrotime();
// new application
$kfc = &new KFC(APP_DIR,0);
// set defaults controller (option)
$kfc->setDefController('defaults');
// set default view style
$kfc->setDefView('defaults');
$kfc->run();
$end_time = getmicrotime();
echo "<center>执行时间: ".($end_time-$start_time)."</center>";
?>
第四步:在Controllers下面创建一个目录index(必须跟入口文件名称一致),然后在index目录下创建一个默认控制器文件defaults.class.php,代码如下:
<?php
class defaults extends Controller{
function view_defaults(){
//example use tpl
$assign['homepage']['name'] = "Hello World!";
$this->assign($assign);
$this->display("index.html");
}
}
?>
第五步:在Views目录下创建defaults目录,做为默认主题模板。然后在defaults目录下创建模板index.html
代码如下:
<html>
<base href="<?=$site_url?>">
<title><?=$site_title?></title>
<body>
<?=$homepage['name']?>
</body>
</html>
第六步:完成,在浏览器输入http://localhost/index.php
第一步:在网站根目录下,首先将整个KFC框架拷贝过来,然后分别创建目录Controllers(控制器),Models(业务模型),Views(模板视图),tmp(缓存目录),Languages(语言包目录),public(公共目录),Plugins(外部插件目录)。
在public目录下再分别创建目录flashs,images,javascripts,stylesheets,htmls,这些目录将存放全站共享的静态文件。
第二步:创建配置文件config.ini.php,代码如下:
<?php
//Application
//use dev, online
define("APP_STATUS", 'dev');
// define application directory
define("APP_DIR", dirname(__file__));
// define systems KFC directory, it can be relative
define('KFC_DIR', APP_DIR . "/KFC");
// define language
define("APP_LANG",'en');
// use database or not
define("USE_DATABASE",0);
// define session save handle (file, mysql, memcache)
define("SESSION_HANDLE",'file');
// turns off access to post variables through anything
define('HIDE_POST', 1);
// disallow spaces in url parameters, helps prevent sql injection.
define('STRIP_URL_VARS' ,1);
//Global-Site Settings
$GLOBALS['gSiteInfo']['site_name'] = 'KFC Demo';
$GLOBALS['gSiteInfo']['version'] = 'v1.0';
$GLOBALS['gSiteInfo']['site_url'] = 'http://localhost/';
$GLOBALS['gSiteInfo']['site_title'] = "KFC PHP Framework";
$GLOBALS['gSiteInfo']['webcharset'] = 'utf-8';
$GLOBALS['gSiteInfo']['pagenum'] = 15;
?>
第三步:创建一个入口文件index.php,代码如下:
<?php
include(dirname(__file__) . "/config.ini.php");
include(KFC_DIR . "/KFC.php");
$start_time = getmicrotime();
// new application
$kfc = &new KFC(APP_DIR,0);
// set defaults controller (option)
$kfc->setDefController('defaults');
// set default view style
$kfc->setDefView('defaults');
$kfc->run();
$end_time = getmicrotime();
echo "<center>执行时间: ".($end_time-$start_time)."</center>";
?>
第四步:在Controllers下面创建一个目录index(必须跟入口文件名称一致),然后在index目录下创建一个默认控制器文件defaults.class.php,代码如下:
<?php
class defaults extends Controller{
function view_defaults(){
//example use tpl
$assign['homepage']['name'] = "Hello World!";
$this->assign($assign);
$this->display("index.html");
}
}
?>
第五步:在Views目录下创建defaults目录,做为默认主题模板。然后在defaults目录下创建模板index.html
代码如下:
<html>
<base href="<?=$site_url?>">
<title><?=$site_title?></title>
<body>
<?=$homepage['name']?>
</body>
</html>
第六步:完成,在浏览器输入http://localhost/index.php
KFC因为提供了安装程序,使启动一个应用项目变得非常简单。KFC框架本身不用安装。
安装:
1. 下载源文件压缩包,上传至网站空间,解压缩后出现KFC、admin、install、Docs和install.php等,admin为示例应用项目(demo);
2. 运行install.php,按照提示操作自动创建新的应用项目(需要保证根目录权限为777)。否则手动按照示例项目先创建应用项目目录,然后逐步创建其他目录和入口文件,配置文件等。
3. 将web服务器documentroot目录修改指到项目目录下。(使用虚拟主机空间的用户只需要在步骤2选择在根目录下安装项目,步骤3就不用做了)。
配置:
应用项目安装完成之后,程序员可以修改的配置地方只有两个文件,入口文件和配置文件。一般情况下,入口文件在确定了默认启动控制器,默认模板风格,数据库引擎类,模板引擎类,是否启动权限验证,是否采用缓存之后就不需要修改了。剩下可以修改的配置全在config.ini.php。除了安装时KFC框架必需的静态配置之外,程序员还可以根据项目要求增加配置参数。
安装:
1. 下载源文件压缩包,上传至网站空间,解压缩后出现KFC、admin、install、Docs和install.php等,admin为示例应用项目(demo);
2. 运行install.php,按照提示操作自动创建新的应用项目(需要保证根目录权限为777)。否则手动按照示例项目先创建应用项目目录,然后逐步创建其他目录和入口文件,配置文件等。
3. 将web服务器documentroot目录修改指到项目目录下。(使用虚拟主机空间的用户只需要在步骤2选择在根目录下安装项目,步骤3就不用做了)。
配置:
应用项目安装完成之后,程序员可以修改的配置地方只有两个文件,入口文件和配置文件。一般情况下,入口文件在确定了默认启动控制器,默认模板风格,数据库引擎类,模板引擎类,是否启动权限验证,是否采用缓存之后就不需要修改了。剩下可以修改的配置全在config.ini.php。除了安装时KFC框架必需的静态配置之外,程序员还可以根据项目要求增加配置参数。




