IcePHP 框架文档

IcePHP框架文档

简介

2014年6月25日 星期三

10:27

 

定位

IcePHP是一个私有的,非开源,基于MVC结构的轻量级PHP开发框架.

首要目标

以最低的学习成本提供了一个简单,易用,高效的PHP开发框架.

并根据具体项目需求进行裁剪,修改,增强

阅读前提

本手册假设阅读人员已经熟练掌握以下概念

OOP,MVC,设计模式,ORM,CRUD,单一入口

如有疑问,请百度之

环境要求

框架随时进化,请尽可能提供最新的稳定版开发及运行环境

开发环境推荐WAMP最新版

运行环境推荐LNMP最新稳定版

使用许可

仅在本人曾经工作的互联网公司曾经参与过的项目中使用.

框架随时进化,不提供向后兼容

特性

框架尽可能精简,清晰,以方便随时根据需求进行进化

仅支持Mysql,Mongo,不支持SQL Server,Oracle及其它不常用数据库

内建简单模板,不支持Smarty或其它模板

所有看起来高大上的功能均不支持,请开发人员自行实现

调试模式

框架提供调试模式与运行模式的切换功能

 

 

 

目录结构

2014年6月25日 星期三

10:36

 

一级目录

program

程序目录,存放开发人员编写的项目代码

public

公开目录,存放所有允许Web用户访问的静态文件,上传文件以及项目入口文件

run

运行时期目录,存放框架运行时生成的缓存文件,日志文件以及编译后的视图文件

system

框架目录,存放框架系统类

 

程序目录

controller

控制器目录,MVC结构中的C

当项目规模较大时,可建立一层二级目录以分别存放控制器类

但不同目录之中的控制器类不允许同名

model

数据逻辑目录,MVC结构中的M

view

视图目录,MVC结构中的V

logical

业务逻辑目录,除小型项目外,MVC中的M将被拆分为两部分

数据逻辑(Model)存放单一数据表内部的逻辑实现

业务逻辑(Logical)存放多个数据表之间/之上的逻辑实现

unit

逻辑单元目录,大型项目时,MVC中的M将分拆分为三部分

逻辑单元(Unit)存放与数据表无关的逻辑实现

config

配置目录,存放系统配置及项目配置

lib

外接库目录,提供与其它非框架代码库的对接功能

 

公开目录

static

静态文件目录,存放所有项目中使用到的脚本文件,样式表文件,图片文件及其它静态文件

upload

上传文件目录,存放Web用户上传的文件

index.php

单一入口文件,此文件需要Apache或Nginx配置为默认文件

 

运行时期目录

cache

缓存文件目录

log

日志文件目录

view_c

编译后的视图目录

 

系统目录

frame.system.php

框架入口类

plugin.php

框架作为插入模式使用时的入口文件

program.php

框架作为命令行模式使用时的入口文件

core

框架核心类目录

dao

数据访问对象类目录

mvc

MVC相关类目录

enhance

扩展功能类目录

 

静态文件目录

static/js

JS脚本文件目录

static/img

图片文件目录

static/css

样式表文件目录

其它

其它静态文件

 

 

命名规范

2014年6月25日 星期三

11:16

 

所有文件名

全部由小写字母组成(不包括外接库文件)

控制器类

以.controller.php结尾

数据逻辑类

以.model.php结尾

业务逻辑类

以.logical.php结尾

逻辑单元类

以.unit.php结尾

视图文件

以.tpl结尾(可通过配置文件修改)

编译后的视图文件

以.php结尾

框架类

以.system.php结尾

日志文件

以.log结尾

缓存文件

以.cache结尾

 

所有文件以无BOM头的UTF-8编码格式保存

 

 

调用方法

2014年6月25日 星期三

13:57

 

Web模式

…/ice/public/index.php?c=<控制器名称>&a=<动作名称>&……

默认使用参数c来指定控制器名称,使用a来指定动作名称,也可以在系统配置中修改

插入模式

<?php

require_once '../../ice/system/plugin.php';

plugin('webservice','index',array('s'=>'answer'));

exit;

1.包含ice/system/plugin.php

2.调用plugin方法,并指定控制器名称,动作名称,以及其它参数

命令行模式

php ice/system/program.php "c=webservice&a=test&…"

1.使用PHP启动 ice/system/program.php

2.所有参数如Web模式, 使用引号包含

 

 

 

 

 

控制器(controller)

2014年6月25日 星期三

10:56

 

类名

以C前缀,之后是驼峰规则,如 CIndex

与文件名对应

index.controller.php => CIndex

otherprocess.controll.php => COtherProcess

 

基类

 SController

 

属性rawController

原始请求的控制器名称

 

属性rawAction

原始请求的动作名称

 

属性controller

当前请求的控制器名称,可能与原始控制器名称不一致

 

属性action

当前请求的动作名称,可能与原始动作名称不一致

 

属性header

<!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=utf-8" />

常用于输出HTML头

属性backUrl

本次请求的来源页面地址

即referer

属性request

本次请求的参数对象

类SRequest

方法redirectTemporary

输出一个302跳转(临时重定向)

 

方法redirectPermanent

输出一个301跳转(永久重定向)

 

方法headerto

重定向到指定控制器及动作(Action),利用302跳转实现

 

方法ajaxOk

输出一个固定格式的JSON

用于Ajax响应

方法ajaxError

输出一个固定格式的JSON错误

用于Ajax响应

方法setBack

记录当前地址为回退地址,以便后继使用

跨请求

方法getBack

取回之前由setBack记录的回退地址,以便跳转

跨请求

方法goBack

取回之前记录的回退地址,并跳转

 

方法cacheToday

输出一个CDN的缓存头,指定本次输出可以缓存的时间

 

方法mustWWW

限制本次请求的二级域名必须是www,利用must实现

 

方法must

限制本次请求的二级域名必须是指定的二级域名,不允许Ajax请求

 

伪构造函数

如果控制器中存在方法 construct ,则此方法将在具体动作前执行,此时$this->request等属性已经生成. 原构造 方法__construct 时,属性尚未生成

 

 

 

 

 

 

数据逻辑(model)

2014年6月25日 星期三

10:56

 

类名

以M前缀,之后是驼峰规则,如 MOttProgram

与文件名对应

ottprogram.model.php => MOttProgram

program.model.php => MProgram

 

基类

SModel

 

属性table

相对应的表对象

STable

方法table

获取相对应的表对象

STable

其它方法

请参考类 STable

 

 

常用定义

 

class <类名> extendsSModel {

protectedstatic $handle;

 

/**

 * 构造方法

 */

protectedfunction __construct() {

$this->table= table ( '<对应的表名>' );

}

 

/**

 * 单例化

 *

 * @return <类名>

 */

public staticfunction instance() {

if (!self::$handle) {

self::$handle= new self ();

}

returnself::$handle;

}

 

<其它数据逻辑方法>

}

 

 

常用调用

$mProgram=MProgram::instance();

$mProgram->select(……);

 

 

 

业务逻辑(logical)

2014年6月25日 星期三

10:56

 

类名

以L前缀,之后是驼峰规则,如 LDeviceAuth

与文件名对应

deviceauth.logical.php => LDeviceAuth

webservice.logical.php => LWebservice

 

基类

SLogical

 

约束

禁止实例化,所有方法都是静态方法

 

 

示例

 

 

 

视图(view)

2014年6月26日 星期四

10:40

 

简介

模板

框架自建一个简单的模板系统,使用一套类PHP的语法

 

编译

编译后的视图文件存放在view_c目录下

可通过系统配置修改

自动编译

视图更新后,将会自动重新编译

自动编译将浪费一定效率来判断视图是否已经更新

可通过系统配置修改

不再自动编译

约束

语法紧密,不要书写多余的空格

将导致编译错误

约束

避免一行内多个模板语法

有时将导致编译错误

 

模板语法

模板定界符

{

}

 

for循环

{for($i=0;$i<count($arr);$i++)}

{endfor}

定界符内是PHP语法

foreach循环

{foreach($arr as $k=>$v)}

{endforeach}

定界符内是PHP语法

while循环

{while(条件表达式)}

{endwhile}

定界符内是PHP语法

if判断

{if($i>5)}

{elseif($i>2)}

{else}

{endif}

定界符内是PHP语法

嵌套原生代码

{php}

{/php}

其中可以书写任意PHP代码

子模板包含

{include('子模板',参数数组)}

注意:子模板中使用的变量,必须在主模板中明确传递

赋值

{assign(结果变量名=model('模型类名')->方法名(参数表))}

{assign(结果变量名=逻辑类名::方法名(参数表))}

()间是PHP语法

显示函数返回值

{date('Y-m-d H;i:s')}

{dump($var,'title',true)}

既然是函数调用,最后就应该是')'结束

显示变量的值

{$变量}

{$对象->属性}

{$数组[下标]}

 

判断是否IE浏览器

{ifIE}

{else}

{endif}

 

自定义标签

{:方法名称(参数列表)}

 

这将调用STemplate下的静态公开方法,并显示返回结果

包含JS文件

{js('jquery','my'[,…])}

不需要书写后缀

可一次包含多个脚本文件

文件存储路径由系统配置文件决定,默认是 /ice/public/static/js/

包含CSS文件

{css('main','page'[,…])}

同上

输出图片路径

{img}

输出图片所在路径前缀

常用在IMG标签的SRC属性中

输出XML头

{xml}

<?xml version="1.0" encoding="utf-8"?>

输出上传文件路径

{upload}

 

 

 

配置(config)

2014年6月25日 星期三

10:57

 

系统配置ice/program/config/system.config.php

以下为经常修改项目

path_root

应用程序根路径

默认值为 /ice/public/

此处需要根据Web服务器的配置决定,即访问到 ice/public/index.php 文件所需要的URL地址中的路径部分

如 Apache的documentRoot配置为 ice 目录,则此处应为 /public/

 

config

配置模式,当此处使用debug时,自动开启调试模式

当此处使用run时,开启运行模式

参考调试

cachePage

页面片段缓存的方法 , none/file/mem

参考页面片段

cacheData

数据缓存的方法 , none/file/mem

参考DAO

cacheMust

特定缓存的方法 , none/file/mem

参考缓存

调用方法

config('system','<配置项名称>');

 

 

日志配置ice/program/config/log.config.php

通常不修改

 

应用配置ice/program/config/*.config.php

根据项目决定

调用方法

config('<配置文件名>','<配置项名称>'[,<下级配置项名称>]);

 

 

以下配置根据系统配置中的config的值分别存放在 ice/program/config/debug/目录下 及ice/program/config/run/目录下

 

数据库配置database.config.php

以下为经常修改项目

_default

array(

'host'=>'192.168.60.24',//数据库服务器地址

'port'=>'3306',        //数据库服务端口

'user'=>'root',

'password'=>'',

'database'=>'ronghetv',//数据库名称

)

此处配置默认数据库

<表名>

同上

特意指定某个表所在的数据库配置

*注意

配置文件是一个PHP文件,这表明此处允许全部PHP语法

如果有多个表需要指定同一个非默认数据库配置

那么可以事先定义一个变量来存储数据库配置,以简化表配置

 

 

Memcache配置memcache.config.php

servers

共有多少台缓存服务器

 

<N>

array(                        

'host'=>'127.0.0.1',//缓存服务器主机地址

'port'=>'11211'        //缓存服务端口

)

第N台缓存服务器的配置

 

文件缓存配置filecache.config.php

通常不修改

 

Mongo数据库配置mongo.config.php

<表名>

服务地址

mongodb://localhost/ice

 

 

系统类(system)

2014年6月25日 星期三

11:10

 

框架常量(仅用于框架)

ICE_PHP_FRAMEWORK

用于判断是否已经包含框架

by liyong@nenu.edu.cn QQ:31008088

DIR_ROOT

框架根目录

/ice/

DIR_SYS

框架系统目录

/ice/system/

DIR_CONFIG

框架配置目录

/ice/progra/config/

 

框架全局函数(为开发人员提供)

dump

显示/返回一个复杂变量/对象的值

 

debug

记录一个调试信息

如果在调试模式下,输出时会附带输出全部调试信息

由SDebug实现

isDebug

判断是否处于调试状态

由SDebug实现

setDebug

设置当前调试状态

由SDebug实现

config

获取配置

由SConfig实现

cache

获取缓存实例

SCache

table

创建一个标准表对象

STable

mongo

创建一个标准Mongo对象

SMongo

lib

引入一个外接库文件

 

plugin

本框架作为插入模式使用时,主入口函数

由SFrame实现

fragment

显示一个页面片段,通常由View来调用

由SFrame实现

display

显示一个指定的视图

由STemplate实现

fetch

获取一个视图的结果,而不显示

由STemplate实现

url

创建一个URL地址

由STemplate实现

writeLog

写文本日志

由SLog实现

sessionLog

写入当前会话日志

由SLog实现

isCliMode

判断当前是否是命令行模式

 

mid

字符串截取

 

 

框架类(只描述开发人员可以使用的)

SFrame::checkfile

检查本地文件是否存在

 

SFrame::timeLog

获取当前时间/获取当前时间与指定时间的时间差

 

SFrame::getRequest

获取当前请求的请求参数对象

SRequest

SFrame::getModule

获取当前模块名称

 

SFrame::getController

获取当前控制器名称

 

SFrame::getAction

获取当前动作名称

 

SFrame::getRawController

获取原始控制器名称

 

SFrame::getRawAction

获取原始动作名称

 

SFrame::makeDir

根据文件名,创建必要的目录

 

 

不对开发人员开放

SConfig

实现配置文件的读取

 

SDebug

实现调试模式及调试信息的管理

 

SArrayObj

实现数组与对象的转换

 

 

 

 

 

 

请求参数(SRequest)

2014年6月25日 星期三

17:53

 

SRequest

属性requests

其中保存了$_REQUEST的数据

支持SArrayObj访问(见下)

属性posts

其中保存了$_POST的数据

同上

属性gets

其中保存了$_GETS的数据

同上

属性servers

其中保存了$_SERVER的数据

同上

属性env

其中保存了$_ENV的数据

同上

属性files

其中保存了$_FILE的数据

同上

属性cookies

其中保存了$_COOKIE的数据

SCookie

属性sessions

其中保存了$_SESSION的数据

SSession

属性url

本次访问的URL

 

属性referer

本次访问来源页面的URL

 

属性ip

访问者的IP(去除CDN路径上的IP)

 

属性rawIp

原始IP(完整的IP,如果经过CDN,应该是三段,如果不经过CDN,应该是一段)

 

属性curUrl

当前访问路径 (去除域名,端口,去除参数)

 

属性https

是否Https访问

 

属性domain

当前访问协议及域名

 

属性port

当前访问端口

 

属性post

当前访问域名

 

属性agent

HTTP_USER_AGENT

 

属性domains

当前访问域名 分解

 

静态属性isAjax

当前是否Ajax访问

 

方法antiHtml

防入侵,包括IP黑名单,禁止字符,禁止词

anti.config.php

方法getRequest

返回全部_POST及_GET  数组方式

 

方法instance

获取一个实例

单例化

方法isIe

当前请求来源浏览器是否是IE

 

方法isIe67

当前请求来源浏览器是否是IE6或者7

 

方法isMobile

当前请求来源是否是手机浏览器

 

方法judge

参数验证体系(尚未完善)

通过SJudge实现

 

SArrayObj 提供了统一的访问接口

方法all

将数据以数组方式返回

$request->all();

方法count

计数数据的个数

$request->count();

方法exist

判断某个参数是否存在

$request->exist('id');

方法get

获取某个参数的值

$request->get('id');

方法del

删除某个参数

$request->del('id');

 

删除某个参数

unset($request->id);

 

获取某个参数的值

$request->id;

 

设置某个参数的值

$request->id=<something>

 

SCookie,SSession

在实现SArrayObj功能的同时,提供以下功能

方法set

设置某个参数的值

$request->sessions->set('user_id',1234');

 

 

缓存(cache)

2014年6月25日 星期三

11:14

 

获取缓存实例

cache('must')

方法set

缓存一个数据

方法get

获取一个缓存数据

方法clear

清除全部/指定域的缓存数据

方法clearAll

清除全部缓存数据

方法delete

清除一个指定的缓存数据

方法enabled

当前缓存是否可用

 

 

 

 

日志(log)

2014年6月25日 星期三

11:14

 

日志文件位置

日志根目录由系统配置决定

下面按年/月/日进行目录划分

 

记录文本日志

log 全局函数

由SLog实现

记录会话日志

sessionLog 全局函数

由SLog实现

清除指定日志

SLog::clear

 

 

 

外接库(lib)

2014年6月25日 星期三

11:12

 

外接库文件位置

由系统配置文件决定

引入外接库

lib全局函数

 

 

DAO

2014年6月25日 星期三

15:31

 

表(STable)

创建表对象

table('表名')

表所在的数据库配置由database配置文件决定

方法exist

判断是否存在满足条件的记录

 

方法col

获取一列数据

返回一个一维数组

方法count

计数满足条件的记录数

返回一个自然数

方法get

获取一行一列的值

返回一个单值

方法row

获取一行数据

返回SRow对象

方法getPrimaryKey

获取当前表的主键字段名

 

方法query

执行一个SQL查询

参数是一个完整的SQL语句

用于解决复杂查询

返回SResult对象

方法execute

执行一个SQL语句

参数是一个完整的SQL语句

用于解决复杂操作

 

方法increase

方法decrease

对表中满足条件的记录的某一字段的值进行增减指定常量

 

方法insert

插入一条记录

 

方法insertIgnore

插入一条记录

如果原来已经存在(根据表约束判断),则放弃

 

方法replace

插入一条记录

如果原来已经存在(根据表约束判断),则更新

 

方法update

修改满足条件的记录

 

方法delete

删除表中满足条件的记录

 

方法deleteAll

删除表中全部数据

 

方法disableCache

临时禁止缓存,只禁止一次

 

方法selectHandle

生成一个原生的查询句柄

此方法内存占用较少,用于查询大量数据

参考PHP手册中的PDO::query

方法select

获取多行数据

返回SResult对象

方法distinct

方法fields

方法groupby

方法having

方法limit

方法orderby

方法where

为后继Select,指定Distinct

为后继Select,指定字段

为后继Select,指定分组

为后继Select,指定分组过滤

为后继Select,指定分页

为后继Select,指定排序

为后继Select,指定条件

 

 

SMongo

建设中

 

结果集SResult

来源

STable的select,query的结果

 

方法count

计数本结果集的行数

 

访问方法

与数组相同

 

join

joinMongo

一对多关联 下一个表

 

map

mapMongo

一对一映射 下一个表

 

 

行(SRow)

来源

STable的row的结果

SResult中的一行

 

方法exists

判断是否存在此列

 

访问方法

与数组相同

 

join

joinMongo

一对多关联 下一个表

 

map

mapMongo

一对一映射 下一个表

 

 

 

 

调试(debug)

2014年6月25日 星期三

11:31

 

配置

修改系统配置中的config为 debug

判断是否调试状态

isDebug全局函数

输出调试信息

debug全局函数

 

 

模块(module)

2014年6月25日 星期三

16:58

 

概念

当项目规模增长到一定阶段时,项目应划分为若干模块(Module)

 

请求方法

请求中指定模块 c=<模块名称>/<控制器名称>

 

文件存储

controller/<模块名称>/<控制器>

 

Model

所有模块公用

如果想自用,干脆重新搭个Web服务好了

Logical

自带目录结构

 

View

自带目录结构

 

Config

所有模块公用

请自行约束使用

 

 

 

 

路由(router)

2014年6月26日 星期四

10:19

 

建设中

 

 

参数检查(judge)

2014年6月26日 星期四

10:19

 

建设中

 

 

逻辑单元(unit)

2014年6月25日 星期三

10:56

 

此部分暂时未启用,略

 

 

跨页面消息(SMessage)

2014年6月26日 星期四

13:43

 

建设中

 

 

页面片段(fragment)

2014年6月25日 星期三

15:24

 

建设中

 

 

上传文件

2014年6月25日 星期三

11:14

 

未实现

 

 

CRUD

2014年6月26日 星期四

13:43

 

建设中

 

 

进化计划

2014年6月25日 星期三

14:21

 

3

DAO

去除 预留的 MSSql,Oracle接口

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值