一、简介
1、MVC简介
![MVC框图](https://img-blog.csdn.net/20160914142126707)
![MVC框架总结](https://img-blog.csdn.net/20160914142154941)
2、THinkPHP简介
1.单一入口:在一个网站中,所有的请求都指向一个脚本文件,项目结构规范,控制灵活,更加安全
实例代码:
<?php
define('APP_NAME','App');
define('APP_PATH','./App/');
require('./ThinkPHP/ThinkPHP.php');
?>
3、THinkPHP目录简介
->common 存放当前项目的公共函数
->Conf 存放当前项目的配置文件:C('name'):输出配置项
->Lang 存放当前项目的语言包
->Lib 存放当前项目的控制器和模型
->Runtime 存放当前项目的运行时文件
->Tpl 存放当前的模板文件
二、简单操作
1、THinkPHP运行流程
1.加载ThinkPHP.php
2.加载核心文件
3.加载项目的文件 分析url 调用相关控制器
->m module 模块 控制器
->a action 方法 action=页面
==>localhost/index.php?m=index&a=index
2、THinkPHP的URL模式
//echo U('Index/user',array('id'=>1),'html',false,'localhost');
1:默认模式(pathinfo模式):/ThinkPHPStudy/index.php/Home/Index/user/id/1.html
0:普通模式: /ThinkPHPStudy/index.php?m=Home&c=Index&a=user&id=1
2:重写模式: /ThinkPHPStudy/Home/Index/user/id/1.html(隐藏index.php)
3:兼容模式: /ThinkPHPStudy/index.php?s=/Home/Index/user/id/1.html
->查看url模式:C('URL_MODEL')
->U('模式/方法',array('id'=>1),'html',true/false,localhost)
->重写url用来隐藏index.php
1.开启Apache服务的rewrite服务
2.在index.php的同级目录下创建.htaccess文件
内容/:<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>
->url的伪静态配置: 'URL_HTML_SUFFIX'=>'html|json', // URL伪静态后缀设置
3.自定义函数库
在APP/Home/Common目录下创建function.php文件,面的函数为公用函数库
三、模板技术
1、模板的使用
1.在App/Home/View目录下创建一个以模板为名字的文件夹,如Index,在Index下创建一个以方法名为名字的html文件,如index.html。
2.在控制器的方法上使用: $this->display()方法进行调用。
->display('test')可以指定参数,对应test.html,也可以跨模块,如:display('User/index')
3.传递参数
->在控制器上使用$this->name = 'String'或者$this->assign('name1','ABC')->assign('name2','EFG')
->在html页面上使用php语法输出,如echo name
2、ThinkPHP模板引擎
1.输出:{$zxj.name}/{$zxj['name']}/{$zxj.phone|default='13023000000'}
2.运算:{$zxj['age']+1},注:此时不能使用.表达式,否则无法输出结果
3.调用函数:{$zxj|md5|substr()}
4.循环输出:volist/foreach
<volist name = 'person' id='data' offset='1' length='3' empty='没数据啦'>
{$data['name']}--------{$data['age']}<br>
</volist>
<foreach name='person' item='data'>
{$data.name}------------{$data.age}<br>
</foreach>
5.IF判断: eq:= nep:!= gt:> egt:>= lt:< elt:<= heq:=== nheq:!==
<if condition='$num gt 10'> num大于10
<elseif condition='$num lt 10' /> num小于10
<else/> num等于10
</if>
6.ThinkPHP特有的比较标签
<eq name='num' value='10' >num = 10</eq>
<compare name='name' value='11' type='eq' >num == 11</compare>
7.区间标签:in notin between notbetween range
->:<in name='num' value='1,2,3'>在这个区间</in>
->:<between name='num' value='1,10'>在1~10之间</between>
->:<range name='num' value='1,2,4' type='in'></range>
8.三元运算符: ?:
{$num>11?'大于11':'不大于11'}
9.在模板中使用原生php
<php> echo 'advd' </php>
四、数据库技术
1、模板的使用
1.配置:
'DB_TYPE' => 'mysql', // 数据库类型
'DB_HOST' => 'localhost', // 服务器地址
'DB_NAME' => 'muke', // 数据库名
'DB_USER' => 'root', // 用户名
'DB_PWD' => 'root', // 密码
'DB_PORT' => '3306', // 端口
'DB_PREFIX' => 'mk_' // 数据库表前缀
2.实例化模型
//1.实例化基础模型
$privilege = M('privilege');
$data = $privilege -> select();
dump($data);
//2.自定义模型
1.在model文件下创建模型文件,如UserModel.class.php
2.在controller中实例化该模型
//3.实例化公共模型
1.编写CommonModel集成Model
2.编写相应的自定义模块并集成CommonModel
//4.实例化空模型
$model = M();
$model->query('select * from t_user');//读取
$model->execute('update t_user set user_name = "haha" where u_id = 1');
->:M方法和D方法的区别:D('user')
M方法只能实例化基础的模型
D方法会先去寻找自定义模型,若找到了,则实例化该自定义模型,否则会使用M方法实例化基础模型
2、CURD操作
1.添加数据
$data = array('user_name' => 'xiaoming',
'nick_name' => 'xiaomingming',
'password' => md5('123456'),
'create_date' => date('Y-m-d H:i:s'),
'update_date' => date('Y-m-d H:i:s'), );
<>M('User') -> add($data); ->:返回插入的数据的主键
<>addAll($dataList);->批量插入数据,仅限mysql数据库
<>getLastSql();->获取最后执行的一条数据库语句
2.查询数据
// 查询所有
$data = M('User') ->select();
dump($data);
echo('<hr>');
//查询一种条件
$data = M('User') -> where('id=2')->select();
dump($data);
echo('<hr>');
//多条件查询
$where['id']=2;
$where['user_name']='xiaoming';
$where['_logic']='or';
$data = M('User') -> where($where)->select();
dump($data);
echo('<hr>111');
//表达式查询:eq neq egt gt lt elt between in like not between
// $where['字段名']=array(表达式,查询条件);
// $where['id'] = array('lt',2);//单条件
// $where['id'] = array('between','1,8'); //双参数条件
// $where['id'] = array('like','%xiao%'); //模糊条件
// $where['id'] = array('like',array('%xiao','ming%')); //双模糊条件
$where['id'] = array(array('gt',1),array('lt',3),'or'); // 区间查询
$data = M('User') -> where($where)->select();
dump($data);
echo('<hr>');
//统计用法
/**
* count:统计数量
* max:获取最大值
* min:最小值
* avg:平均值
* sum:求和
*/
$data = M('user')->count();
$data = M('user')->max('user_name');
$data = M('user')->avg('score');
$data = M('user')->sum('score');
dump($data);
3.更新数据
$update['score'] = 60;
$where['id']=1;
$data = M('User')->where($where)->save();
4.删除数据
$where['id']=1;
$data = M('User')->where($where)->delete()
也可以直接使用主键删除:M('User').delete(3);