php-13
来源:互联网 发布:高中物理老师 知乎 编辑:程序博客网 时间:2024/06/05 07:39
MVC架构:
|
C
/ \
/ \
M V
C调用M 完成CURD
C调用V 加载模板,渲染模板并输出
系统流程
thinkphp框架手册:http://document.thinkphp.cn/manual_3_2.html#system_process
1.视图(手册位置: 视图)
模板存放位置和命名规范(首字母大写)
模块/视图目录(View)/控制器名(去除Controller后的名字)/方法名(操作名)+模板扩展名(.html)
1)js+css+img ,放到Public ,创建Home目录,存放;
2)把reg.html 放到 /Application/Home/View/Index/
3)修改js css img 路径
__PUBLIC__ : 会被替换成 /Public
(框架核心:ThinkPHP\Library\Behavior\ContentReplaceBehavior.class.php)
备注: 只要模板文件按照命名规范存放,就可以直接使用
2.控制器类方法中调用模板并输出[C->V](手册位置: 控制器)
2.1调用模板并渲染输出
$this->display();//默认加载模板路径:当前模块/视图目录(View)/控制器名(目录)/方法名.html
$this->display("[模块@][控制器:][方法名]");//完整格式可以调用其他页面
2.2 U方法(自定义函数):用于动态生成URL地址,可以确保项目移植过程中不受环境影响;
模板中使用:{:U('Index/regSave')}//{:函数 }模板中定界符,U参数: [模块/]控制器名/方法名
方法中使用: U('Index/index') //参数: [模块/]控制器名/方法名
2.3 获取数据方法
2.3.1 用原生的 $_POST/$_GET 获取
2.3.2 I方法(自定义函数):用于获取数据(变量类型:post/get)
I('变量类型.变量名','当不存在此变量时默认值'[,'过滤方法']);//省略第三参数默认过滤方式 htmlspecialchars
I('post.') 获取所有post提交的数据 $_POST
I('post.username') 获取表单中的username值
I('post.username','')
I('post.username','','htmlspecialchars')
I('post.username','','/^[A-Za-z]{6,10}$/') 采用正则表达时进行变量过滤,不通过的话则返回默认值(第二个参数值)
I('username') //找 get 或 post 中的username,不推荐使用
2.3.3 Action参数绑定(参照手册位置:控制器->Action参数绑定)-扩展知识
参数绑定是通过直接绑定URL地址中的变量作为操作方法的参数
public function regsave($username[, ...]){//$username就是表单中的名称
echo $username;
}
2.4 session(参照手册位置: 专题 ->SESSION支持 )
设置:$_SESSION['userid']=123;
取值:$_SESSION['userid'];
1.4.2 tp中方法
session();//函数
赋值:session('名称','值');
取值:session('名称');
1.4.3 销毁
原生:unset($_SESSION['userid']);
tp中方法:session('名称',null);
2.5 信息提示和重定向(参照手册位置: 控制器->跳转和重定向 )
2.5.1 信息提示
提示成功,$this->success('提示信息','跳转地址',页面停留时间单位秒) 第二参数: [模块/]控制器名/方法名
$this->success('注册成功',U('Index/index'),5);
提示错误信息,默认返回上一页,并终止下面代码执行 ,$this->error('提示信息','跳转地址',页面停留时间单位秒)
$this->error('用户名不能为空');
区别:1)error结束执行之后代码,success后的代码会继续执行
2)页面不一样
2.5.2重定向,不提示信息,直接跳转
$this->redirect('控制器/方法');
redirect(U('控制器/方法'));
3.自定义模型(Model,手册:模型)
3.1定义
模型类的命名规则 是除去表前缀的数据表名,采用驼峰法(首字母大写)+ Model
文件名命名:UserModel.class.php(文件名和类名一致 + .class.php)
namespace Home\Model;
use Think\Model;
class UserModel extends Model{
}
模型名 表名(假设表前缀tp_)
User tp_user
UserAddr tp_user_addr
3.2 D方法(函数), 来调用自定义模型
D('User');同 new \Home\Model\UserModel();
参数就是模型的名称,大小写要和模型名一直
参数 实例化的模型文件(假设当前模块为Home)
User 对应的模型类文件的 \Home\Model\UserModel.class.php
UserType 对应的模型类文件的 \Home\Model\UserTypeModel.class.php
M()和D()区别
M: 用来实例化模型(默认),不需要自己定义模型类
D: 用来实例化自定义模型,假如这个自定义模型类不存在,自动调用M;
3.3 自动验证(自定义模型中,验证表单中的数据是否合法)
protected $_validate = array(
//验证字段(表单中名称) , 验证规则 , 错误提示 [, 验证条件 , 附加规则 , 验证时间]
array('username', 'require', '用户名不能为空',1),
array('username', '/^[a-zA-Z]\w{5,9}$/', '用户名格式不对',0,'regex'),
array('password', 'require', '密码不能为空'),
array('password', 'password1', '两次密码不一致', 0, 'confirm', 3),
array('username','','用户名已存在',0,'unique'),
//array('email','email','邮箱格式错误'),
//array('tel','/^1[34578]\d{9}$/','手机格式错误',0,'regex'),
);
3.4 自动完成(自定义模型中,用来完成默认字段值的写入)
protected $_auto=array(
//完成字段(表中字段),完成规则[, 完成时间 , 附加规则]
array('password','md5',3,'function'),
array('reg_time','time',1,'function'),
array('ip','getIp',1,'callback'),//调用当前类中的方法
);
protected function getIp(){
return $_SERVER['REMOTE_ADDR'];//获取客户段ip
}
3.5 字段映射(自定义模型中,当表单中的名称和数据表中(User)字段名不一致时使用,)
protected $_map = array(
// 'user' =>'username', // 把表单中user映射到数据表的username字段
);
3.6 使用自定义模型类完成注册(控制器类方法中使用)
$user = D('User');//参数:模型名称, 实例化了 自定义模型类 new \Home\Model\UserModel();
if(!$user->create()){//有错误
$this->error($user->getError()); //提示 验证规则中的错误提示
}else{//验证通过,完成 数据保存
//设置session
$_SESSION['username'] = $user->username; //用户名,必须在add之前
$id = $user->add(); //保存数据到表中,执行后 $user对象销毁
if($id > 0) {
session('uid', $id);//用户id
$this->redirect('Index/index'); //直接跳转不提示 , 首页地址
} else {
$this->error('注册失败');
}
}
阅读全文
0 0
- php 13
- php-13
- PHP Knowledge 13
- PHP课程笔记13
- php学习-13数组
- 初识PHP(13)
- PHP学习笔记 13
- PHP
- PHP
- php
- php
- PHP
- PHP
- php
- php
- php
- PHP
- php
- TCP网络通信程序的流程
- elasticsearch源码分析之使用Guice进行依赖注入与模块化系统
- codeforces510
- 一分钟了解“Matlab打印出红色报错信息error”
- 通过几段代码,理清angularJS中的$injector、$rootScope和$scope的概念和关联关系 .
- php-13
- 真正的OBS工作室版本最新消息19.0.2
- 平常水题 — Codeforces Round #415 (Div. 2) B. Summer sell-off (贪心 + 错误总结)
- android 如何预置APK
- jsp中jdbc的使用
- 一分钟了解”Matlab打印出文字信息fprintf”
- Spring Boot: 开发web 应用
- 几种常用的JS方法
- C# 参考之上下文关键字get、set、value、partial、where和yield