|
文件: |
ecToDo_070201.rar |
大小: |
284KB |
下载: |
下载 | |
070201修改,将硬盘上的最新版本打包,并不即时可用..
/**
* ecToDo Framework 说明文档
* 文档编写:tim
* 最后编辑时间 :2006-9-16
*/
一、框架简介
本框架暂命名为 "ecToDO Framework" ,意为易于使用的框架,目前发布的预览版本仅支持PHP5
1)框架特点
ecToDO Framework 是一个轻巧的,易于使用的基于PHP5的快速开发框架,旨在封装php开发过程中的一些通用流程,使开发者能够专注于功能的实现,以达到加速php应用程序的开发速度.它具有以下特点:
a.流程封装,采用MVC分层结构,易理解,易使用,易扩展
b.使用流行的smarty及pear,同时支持自主扩展
c.内置权限验证,支持自定义权限验证方式
d.方便的客户数据验证方式,自动生成客户端验证代码,并支持扩展
e.使用Factory方式包装model,自定义类库及第三方类库,轻松载入,轻松管理
2)目录结构
ecToDO Framework当前发布的预览版本包括核心框架及一个使用该框架开发的简单图书馆管理系统的demo(该系统的说明附后)
解开压缩包后,可以见到两个文件夹(core及demo),和一个文件(readme.txt,也就是本文件)
核心框架
core/php5/
Action.php //所有动作的基类,权限验证入口
App.php //程序控制器(前端控制),负责初始化所需的对象,根椐请求路径,定位执行的动作
Factory.php //类库工厂,主要职责是生产(实例)所需的model,自定义类,第三方类库
Lang.php //语言包处理
Model.php //model的基类,继承自pear::DB_QueryTool,实现一些常用的方法
Priv.php //权限读取,验证处理
Request.php //获理,预处理用户请求数据,包括get,post等
Response.php //输出或处理响应内容
Valid.php //用户数据验证调用入口
View.php //view的基本,可以在此扩展view的实现
ViewSmarty.php //使用smarty实现view
lang/ //语言包目录,采用"语言.编码.php"方式定义文件名
libs/ //系统用到的类库,如smarty,pear ,你也可以将你或第三方开发的类放在此文件夹,方便使用Factory类调用
valid/ //实际验证动作
demo/
index.php //程序单一入口(如果你不喜欢单入口方式,也可以使用url_rewrite)
library.sql //示例程序数据备份
images/ //web程序所用到的图片,css,javascript等
Action/ //具体动作实现,即程序controller,为清析理解,可以用子目录分组存放
configs/ //配置文件
acl.inc.php //默认权限验证
common.inc.php //应用程序全局配置,大部分为框架运行所需的常量定义
db.inc.php //数据库链接信息
formField.inc.php //数据验证时错误信息的语言转换表
Model/ //数据模型类
View/ //模板,显示逻辑,由于采用smarty,所以该目录结构与smarty的默认模板目录结构基本相同
注意:除了入口的index.php及images/目录,其它程序均可放在web不可访问的目录
3)运行过程
浏览器请求 -> 入口程序启动 -> 载入必须配置,请求实例化App -> 实例化request及response对象,并根椐请求路径判断要执行的action
-> 执行action , action对象操作model,返回相应的view给app -> app将action返回的view显示到前端浏览器 ->完成
二、使用本框架的开发步骤
a.设计数据库
b.编写入口程序,定义所需的配置参数(参考demo,无需作太大修改)
c.编写数据模型,框架的Model基类已包含基本的数据操作方法,大部分时候,你所要做的只是在model中指定表名
d.编写前端显示的模板(显示逻辑)
e.编写相应的action
f.加入权限控制,关闭调试信息
三、扩充本框架
1)更改view Render
ecToDo Framework采用smarty作为内置的模板引擎,你也可以使用其它你熟识的模板引擎作为你的view Render,方法是编写一个继承自view的ViewXX的类,约定地,XX为模板名称,具体实现方法参照ViewSmarty.php
注意:采用smarty是因为它的显示逻辑分离得比较清析,如果你采用其它模板引擎,可能需要在action中作过多的显示逻辑的判断
2)更改Model基类
ecToDo Framework 采用pear::DB_QueryTool作为model的基类实现,你也可以直接改写Model.php,按需要定义model的基类,但建议另外编写一个基类,然后应用程序中继承你所编写的类即可,或者,你也可以直接编写model,而无需继承任何基类.
注意:model文件名及类名的命名应该符合a.文件名首字母大写 b.类名为 'Model_'+文件名(不含后缀),这样定义的好处是可以使用Factory轻松载入
3)更改权限认证
ecToDo Framework 内置权限验证的过程,其原理是登陆时把用户所有的权限保存在session或memcahce等中,请求动作时判断当前动作是否在权限列表中,具体在应用程序中实现,这样的好处是开发者可以根椐需要设计权限控制.
目前,权限控制定义在Action.php的构造函数中(配合Priv.php使用),你可以按需要改写该函数,也可以直接在实际动作(Action.php的子类)中,定义一个构造函数,覆盖原来的权限定义
注意:
a.如果你需要在子类中添加构造函数,同时要保留原有权限处理,请在子类的构造函数中加入parent::__construct();
b.权限定义会用到acl.inc.php,实现简单的控制,请参考acl.inc.php及Priv.php
c.权限设计的例子可以参考demo的实现及作者的另一篇文章:http://blog.chinaunix.net/u/14321/showart.php?id=166782
4)增加验证类形
ecToDO Framework内置了非常丰富的客户数据验证,同时会自动生成客户端javascript验证,你也可以加入自己编写的验证方式,方法是:
编写一个类,类名和文件名均与与验证规则名,存放在valid文件中,类有两个方法,server为服务器端验证,client为客户端验证代码生成.具体请参照原有验证类
5)第三方类库
如果你有好用的第三方类库想加入框架中,只需把它放在libs目录即可(需保证类名与文件名相同),以后可以直接使用Factory::loadLibs('对象名')调用,loadLibs支持一次调用多个对象,以","分隔,返回一个对象数组
四.demo说明
该demo是一个非常简单的图书馆管理系统,使用方法也很简单:
a.新建一个数据库,命名为library,你也可以改成其它名,注意修改db.inc.php
b.导入library.sql
c.修改common.inc.php中的相关项(一般只需改开头部分的路径相关即可)
d.运行程序,默认管理员:admin 密码:123456
五.FAQ
Q:使用ecToDo Framework需要什么软件环境
A:当前版本只在windows XP + Apache2.0.48 + php5.12 中测试通过,其它环境有待验证.
Q:路径设置应注意什么问题
A:使用ecToDO Framework开发程序,路径设置并无特殊要求,理论上,你可以把除了入口文件和需要被访问的图片,css,javascript等之外的所有程序放在web不可访问的位置,只需修改common.inc.php中的相关设定即可,程序会自动查找所需文件
Q:是否支持多字符集
A:ecToDo Framework目前使用载入不同语言包的方式支持多字符集,你只需编写不同的语言包,存放在lang目录,并在common.inc.php中指定语言/编码,使用时,采用Lang::get('')方式取得
Q:如何使用自动载入
A:ecToDO Framework采用Factory的方式自动实例化并载入对象,只要符合命名规则的都可以自动载入,也可以一次载入多个对象,对数组返回,例子可参阅附带的demo,如:
$reader = Factory::loadModel('reader');//返回名为reader的model对象
$obj = Factory::loadLibs('log,bbcode');//$obj['log']为log类实例,$obj['bbcode']为bbcode实例,
原来设想是可以指定构造函数,但此版本未完全实现
Q:使用ecToDO Framewrok如何编写数据验证代码
A:步骤如下:
1)实例验证对象:$valid = new Valid();
2)加入规则 :
$valid -> addRule('reader_name','strSize','2,20');
//第一参数为formName,第二参数为规则名,第三参数为验证规则所有的参数,如果需要,可有第四参数,指定错误信息
$valid -> addRule('idcard','strSize','15,18','身份证号码必须是15或18位');
//输出到客户端,注意要用模板引擎替换变量
$response -> set('js',$valid -> getJS());
//服务器端,如果是提交过数据,并且验证不通过,将错误信息加入$response,以便在view中显示
if($request->isPostBack()){
if(!$valid->execute($request)){
$response -> putError($valid -> getError());
}
模板中的写法参看附例.
Q:关于动作的编写,有何要求?
A:
1)文件名与类名相同
2)可以分子目录存放,访问时使用?act=目录_类,无目录的直接用?act=类
3)一般地,返回一个view的实例,也可用View::redirect()跳转
4)继承自Action,无构造函数,如确实需要,请注意执行一下父类的构造函数,防止权限被忽略
5)必须有execute方法,参数为request及response对象
六.版权声明
循例说一下:本程序可以任意传播,修改,应用,但请保留作者信息,如果你原意,请在使用该框架后,发信给作者,说说使用意见.谢谢!
######################################
# 一地风飞 #
# tim<> #
# 2006-9-16 #
######################################