标签:
MVC是一个设计模式,80年代
主流框架设计模式都是MVC
在php中,框架是一堆代码的集合,这些代码里边有变量、常量、方法、函数、类。
这些代码里边也有设计模式,例如:MVC、单例、AR、工厂。
?
框架最大的特点的使得程序的业务逻辑与数据模型有分开。
?
ThinkPHP:国人开发的一个轻量级框架、注释都是中文的。国人使用非常广泛。
????????????????面向过程、面向对象
zendframework:zend公司官方框架,重量级的,功能非常丰富
Yii:xueqiang,qiang,重量级,OOP面向对象。功能丰富,外国人使用最多的框架。
cakephp:外国框架,功能较丰富。重量级,速度慢
symfony:外国重量级框架,功能丰富。
CodeIgniter:轻量级框架,开发速度快
?
重量级:功能多、OOP面向对象、维护性好、生命力非常顽强
轻量级:功能实用,面向过程和面向对象混合
?
http://www.thinkphp.cn
?
?
2. 处于安全考虑,入口文件位置设置:
新的入口文件内容:
?
?
?
?
?
2. MVC Model
????model也是一个操作类
????数据库中每个数据表都对应一个数据model模型类
入口文件制作调试函数,方便使用
?
?
?
关键字:select()
?
tp的配置变量信息有两部分:
convertion.php
ThinkPHP/Lib/Behavior.*行为里边有一部分
?
1. sql语句最后都通过options属性进行拼装:
Db.class.php的代码
2. 模型相关方法分析
????① Model.class.php类本身就存在该方法,例如(where() field() limit() select())
????② __call()自动调用方法集成了一些方法,例如(table() order() group())
????这些方法可以进行连贯操作$info = $obj -> where()->order()->limit()->select()
?
总结:
?
返回一维数组
getByGoods_price(12000);
getByGoods_name(); 魔术__call();
?
????order() group() 在__call() 自动调用魔术方法有集成好。
????
?
与where比较类似
select * from sw_goods where goods_price>100;
select * from sw_goods having goods_price >100;
?
count() sum() max() avg() min()
?
$model -> query() 查询语句 (二维数组返回)
$model -> execute() 增加、修改、删除
???????????????? insert update delete
????????????????????成功执行返回受影响的记录数目
?
两种方式实现数据添加:数组方式、AR方式
AR规则:
在tp框架中AR模型是假的
数据添加有data属性实现各种信息的收集
查询:select() 添加:add()
修改关键字:save() 返回受影响的记录数目
?
添加数据:数组 和 AR
修改数据:数组 和 AR
注意:实现数据修改必须符合两个条件(主键id 或 where条件)
????
具体使用:
????????
http://网址/index.php?m=控制器&a=操作&goods_id=100&goods_price=2300
http://网址/index.php/控制器/操作/参数1/值/参数2/值/参数3/值。。。。。。
function upd(参数1,参数2,参数3){
????//$_GET[‘参数1‘];
????//$_GET[‘参数2‘];
????参数1,参数2,参数3具体使用
}
?
1. $this -> success()方法被调用后出错:
解决:
① 在config.php里边做配置(把对应的模板文件复制到admin目录下边)
② 修改文件ThinkPHP/Lib/Core/View.class.php
????????????
????
????2. 商品修改
????????① 在修改按钮处,通过get方式把被修改的商品id传递给下个页面
????????????????
????????② 在修改表单里边制作隐藏域保存商品id信息,
这样实现商品修改就有主键的条件
?
用户注册
表单验证:
????通过tp框架进行表单验证
????先决条件:收集表单数据必须通过create()收集
????create()方法内部有集成表单验证规则
????
?
????验证规则的第四个参数:
????
????具体使用:
????
总结:
1. 原生sql语句(query() execute())
3. 删除方法
????$z = $model -> delete(10);
?
?
作业:
?
c) $model = M(); //Model基类
????$user_model = M("User"); //实例化Model基类,操作user数据表
通过create方法接收表单数据,才可以触发验证
$_validate = array(具体表单域验证,具体表单域验证,具体表单域验证);
?
????
布局继承 extends block
????利用布局继承提取头部、脚部对系统维护升级有很大的好处(减少重复性劳动)
????
????
????用户中心左边有共同的内容,为了维护方便,有两种方案处理
?
通过路由解析,判断出当前的具体操作,就可以知道哪个标签高亮显示
如何知道具体操作方法是什么?
dispatch解析路由
根据当前请求方法,判断出具体标签高亮显示。
?
$smarty -> display(模板名称);
ThinkPHP框架调用模板:
????① $this -> display(); tp框架会自动把摸板名称给拼装好,与操作名一致
????② $this -> display(模板名); 调用当前模块下的指定模板,模板没有后缀名
????③ $this -> display(模块/模板名); 调用其他模块下额指定模板
????④ $this -> display(相对路径模板); 了解
????
?
include() require
通过import引入对应的类文件
import("hello.world.apple"); hello/world/apple.class.php
总结:
?
?
模型对应方法checkNamePwd()
cookie与session操作样子一致
?
5. 退出系统逻辑
?
缓存:把数据库中的信息获取出来,放到一个缓冲介质里边,在相当一段时间之内,重复的数据就去缓存里边读取。
?
缓存介质:内存、file文件、数据库
?
不同的缓存介质,操作的方式不一样
1. 具体使用:
4.具体语言使用????
????
????$language是在控制器通过L()函数传递的变量
????
????通过L()函数读取语言信息,传递给控制器
?
收集表单信息,把数据存入数据库
可以使用"自动完成"机制对即将入库的信息进行二次处理
例如:密码加密、用户注册时间等等。
?
自动完成 类似 表单验证
表单验证在create()方法内部触发
自动完成 也在create()方法内部触发
?
?
自动映射和自动完成都通过create()方法触发。
?
程序开发、执行不同的环节、不同的功能利用不同的文件进行处理。
把一个大块的功能切割为小块进行开发、执行
?
tag("app_begin");
????function tag()
????????配置tags变量信息
????????B()
????function B()
????????实例化行为Behavior,调用run()方法
tags.php
?
总结:
tag()函数
????
作业:
rbac:role base access (基于角色的用户权限控制)
ThinkPHP
?
RBAC (role base access) 基于角色的权限控制
?
?
经理角色:"Company-show,Cat-mag,Product-list"
3张数据表
?
权限数据
????角色数据
????
????管理员数据
????
?
给普通控制器找一个父类,这个父类再继承Action
?
?
总结:
?
manager 管理员
role 角色表
auth 权限
?
添加权限:
?
?
开发步骤:
?
?
?
?
标签:
原文地址:http://www.cnblogs.com/yizhinageyuanfang/p/5518573.html