2.1 控制器
控制器-Action这里就是modules下以 Action.class.php结尾的文件,也就是程序执行最小单元
在yogurt中充当MVC模式的控制器角色,负责业务逻辑调用及控制模板输出,主要的任务是执行相应的动作,完成相应的业务操作,并把结果输给View,View控制接收结果展现给client
模块指的是应用程序的执行单元对应modules/下的目录,modules 在init.php中定义 defined('M_DIR') or define('M_DIR', dirname(APP_DIR)."/modules");。
动作指构成模块执行的最小单位, 在modules/下的目录里的*Action.class.php文件中的方法名。
Action 方法的查找规则为:先查找目录M_PATH/moduleName,若不存在则查找子域相同的目录M_PATH/sld,若不存在则查找M_PATH目录下;
Action 的使用 以 user 模块为例
在文件中加入 modules/user/UserAction.class.php
class UserAction extends Action {
function index(){
echo 'hello world';
}
function login(){
#Action类中对View的display方法进行了封装 参数$cacheTime代表页面级是否缓存 值为绝对值取整,若为0 则无缓存,大于0 代表缓存时间
$this->display($tpl=null,$cacheTime=Config::VIEW_CACHE_TIME,$tplType=Config::VIEW_TEMPLATE_TYPE)
}
}
2.2 模型
yogurt 中采用DAO与ORM实现MVC模式中的Model层,下面介绍下这两种方式
[DAO]
DAO封装了数据操作常用的方法(getOne、getRow、getList、insert、update、delete等),以简化数据操作,底层的实现则有mysql、pdo、Mdb2、adodblite、mysqli,当然你也可以自己扩展,只需实现Dao的抽象方法即可
yogurt 中调用DAO的方法,以DaoPdo为例:
获取一个dao对象你可以这样调用
$dao = Model::getDao($schema='www',$daoType='pdo'); // 通过factory模式取得不同的Dao对象
或者
$dao= new DaoPdo();
$dao->connect($schema="www"); // $schema 为在 ini.php 中配置的 数据连接 ,这里返回的是一个原生类
DAO类的特点:
1 连贯操作
$dao->table('users')->where("uid=28")->field('uid,email')->find();
2 事务支持
3 数据缓存支持
DAO实际是通过拼接SQL语句完成与数据库的交互
[ORM]
(phpsa实例教程之号外6) adodbLite, pearDB, pdo数据库抽象层的使用
(phpsa实例教程之号外8) orm技术2: propel技术详解
(phpsa实例教程之号外9) orm技术3: mdb2_query_tool 技术详解
(phpsa实例教程之号外10) orm技术4: active_record介绍
学习BusinessService(二): 使用QueryToolOrm
学习BusinessService(三): 使用ActiveRecord
学习BusinessService(四): 使用Propel
动画教程8: 使用ezpdo来做ORM
动画教程9: 使用propel来做ORM
动画教程10: 使用mdb2-query-tool来做ORM
动画教程11: 使用active_record来做ORM
小结:我在项目开发中曾经封装了多一层 BusinessService 然后extends BusinessService来实现逻辑操作功能 但并没有带来方便,反而显得繁琐;
代码大约是:
class UserBusinessService extends BusinessService{
function getUser($uid){
$dao=$this->getDao("pdo");
retrun $dao->getRow('select * from user where uid=1 ');
}
}
调用 : $userObj = new UserBusinessService;
现在的写法就是直接在Action 中完成,如
$user = Model::getDao()->getRow('select * from user where uid=1 ');
这样看起来逻辑性强点,而且调试方便
2.3 视图
view[ViewSmart、ViewSmartTemplate、ViewPhplib、ViewSmartTemplate、Savant3(http://phpsavant.com)]
明白View: 显示功能
(phpsa实例教程之号外5) smarty/phplib模板的使用
1 模板功能
2 UI扩展,这里基本上要依赖UI插件来实现,因为毕竟php的表现能力并不强
category、Ajax、html生成、Pear