Model 模型(数据库操作)
View 视图(页面显示)
Controller 控制器(逻辑处理)
优点
1、代码分工更加明确
2、便于网站的维护与管理(便于二次开发)
特点
1、国内程序员研发
2、轻量级框架
3、集成Smarty模板引擎
4、封装类
5、目录自动生成
6、项目单一入口
命名空间namespace:从php5.3版本才加入进来
命名空间:虚拟的文件夹
作用:解决类名的重命名
定义命名空间
namespace 空间名;
namespace 空间名\空间名\空间名;
注意:namespace必须出现在整个页面的最顶端
引用指定空间下的类
use 空间名\类名;use 空间名\空间名\空间名\类名;
$对象 = new 类名();
$对象 = new 空间名\类名();
$对象 = new 空间名\空间名\空间名\类名();
$对象 = new \空间名\空间名\空间名\类名();
注意:use一次只能引用一个类
项目目录
library----------------第三方资源包
ThinkPHP
jquery
kindeditor
application------------应用程序
Common
Common-------------公用函数
Conf---------------配置文件
config.php
Home
Common-------------公用函数
Conf---------------配置文件
config.php
Controller---------控制器
Model--------------模型
View---------------视图
Runtime--------------运行时(临时文件)
public-----------------公用文件
images
css
index.php--------------入口文件
控制器的命名规则1、必须采用大驼峰的命名规则
2、必须以Controller.class.php来结尾
IndexController.class.php
LoginController.class.php
控制器中方法的命名规则
1、必须采用小驼峰的命名规则
insert()
add()
delete()
del()
deleteBbs()
delBbs()
index()
控制器定义的语法格式
namespace 模块名\Controller;
use Think\Controller;
class XxxController extends Controller
{
public function xxxxx()
{
// 逻辑代码;
$this->assign(key,value);
$this->assign(key,value);
$this->assign(key,value);
$this->display();
}
}
$this->display()方法的使用
1、$this->display();
View
控制器
方法.html
2、$this->display("hello");
View
控制器
hello.html
Think标签特点
1、标签定界符:{}、<>
只有输出值的标签是{}、其他标签都是<>
2、所有的<>标签,必须都是双标签
<标签></标签>、<标签/>
3、标签里的key名,有的加$,有的不加$
只有输出值的标签、if标签需要加$,其他标签都不加$
Think标签
1、显示变量值
{$key}
2、显示数组中某一个值
{$key.下标}
{$key[下标]}
3、if标签
<if condition="条件"> (<if condition="$userName=='张三'">)
内容
<elseif condition="条件"/>
内容
<else/>
内容
</if> (</if>)
4、比较标签
< lt
<= elt
> gt
>= egt
== eq
!= neq
=== heq
!== nheq
5、switch标签
<switch name="key">
<case value="值1">内容</case>
<case value="值2">内容</case>
<case value="值3">内容</case>
<default/>内容
</switch>
6、for标签
<for start="起始值" end="结束值" step="2" name="i">
内容{$i}
</for>
7、foreach标签
<foreach name="key" key="k" item="v">
下标:{$k} 值:{$v}
</forech>
8、volist标签
<volist name="key" key="k" id="v">
序号:{$k} 值:{$v}
</volist>
9、literal标签(忽略标签)
<literal>
Think标签
</literal>
10、php标签
<php>
php代码;
</php>
11、运算标签
+ - * / % ++ --
12、包含html文件
<include file="路径" />
<include file="文件夹:文件" />
公用的html存储位置
View
Public
header.html
footer.html
success.html
<include file="Public:header" />
ThinkPHP的配置文件
1、只对当前的Home模块起作用
application/Home/Common/Conf/config.php
2、对application下所有模块都起作用
application/Common/Conf/config.php
3、全局配置文件(对整个项目都起作用)
library/ThinkPHP/Conf/convention.php
注意:
1、配置文件的优先级:1 > 2 > 3
2、建议不要修改convention.php
url路由
1、url传参
http://localhost/项目/index.php
http://localhost/项目/index.php?c=控制器&a=方法
http://localhost/项目/index.php?c=控制器&a=方法&名=值
1)链接地址
<a href="index.php?c=控制器&a=方法"></a>
2)引入样式表
<link href="public/css/xxx.css">
2、pathinfo
http://localhost/项目/index.php
http://localhost/项目/index.php/控制器/方法.html
http://localhost/项目/index.php/控制器/方法/名/值.html
1)超链接地址
<a href="__APP__/控制器/方法.html"></a>
<a href="__APP__/控制器/方法/名/值.html"></a>
2)引入样式表
<link href="__ROOT__/public/css/xxx.css">
ThinkPHP中系统的常量
__APP__:获得入口文件地址(链接地址、跳转地址)
__ROOT__:获得项目根目录(引入css、images、library)
注意:不仅控制器直接调用,而且html文件也可以直接调用
ThinkPHP中U()函数:链接地址、跳转地址
控制器中:U("控制器/方法")
html文件中:{:U("控制器/方法")}
C('参数') 获得配置变量信息
E() 帮助显示错误信息
L() 获取语言变量信息
空操作
function _empty() {
}
空控制器
class EmptyController extends Controller
{
function _empty() {
echo '<img src="'.__ROOT__.'/Public/images/404.gif"/>';
}
}
模型的命名规则
1、必须采用大驼峰的命名规则
2、必须以表名来命名
3、必须以Model.class.php来结尾
BbsInfoModel.class.php
ReviewsModel.class.php
定义模型的语法格式
namespace Home\Model;
use Think\Model;
class 表名Model extends Model
{
public $tableName = "省略了前缀的表名";
public $trueTableName = "真实的表名";
}
D("BbsInfo")--->模型:BbsInfoModel (有模型)
D("BbsInfo")--->表名:_bbs_info (无模型)
D("bbsInfo")--->表名:bbs_info
D("bbsinfo")--->表名:bbsinfo
M("bbsInfo")--->表名:bbs_info
M("bbsinfo")--->表名:bbsinfo
获得模型对象
$model = D("模型名");//必须新建一个模型文件
$model = D("表名");//不用新建模型
$model = M("表名");//不用新建模型
注意:所有表名必须全部小写
建议:Linux下所有表名全部小写
数据库操作
1、查询多条记录,返回:二维数组
$result = $model->select();
$result = $model->field("字段,字段...")->select();
$result = $model->where()->select();
$result = $model->order()->select();
$result = $model->limit()->select();
$result = $model->field()->where()->order()->limit()->select();
2、添加记录,返回:受影响的行数、新加记录的主键值
$result = $model->add(一维关联数组);
$result = $model->data(一维关联数组)->add();
3、删除记录,返回:受影响的行数
$result = $model->delete();
$result = $model->where()->delete();
4、查询一条记录,返回:一维关联数组
$result = $model->find();
$result = $model->field()->find();
$result = $model->where()->find();
$result = $model->field()->where()->find();
5、修改记录,返回:受影响的行数
$result = $model->save(一维关联数组);
$result = $model->where()->save(一维关联数组);
6、执行select语句,返回:二维数组
$result = M()->query("select语句");
7、执行insert、update、delete操作,返回:受影响的行数
$result = M()->execute("insert|update|delete语句");
8、聚合查询
$result = $model->count();
$result = $model->sum("字段");
$result = $model->avg("字段");
$result = $model->max("字段");
$result = $model->min("字段");
页面重定向
1、跳转页面
$this->redirect("控制器/方法");
$this->redirect("控制器/方法",array(名=>值,名=>值));
2、跳转页面,并提示信息
$this->redirect("控制器/方法",array(),时间,提示信息);
$this->redirect("控制器/方法",NULL,时间,提示信息);
系统提示信息页面
$this->success(提示信息,跳转地址);
$this->error(提示信息,跳转地址);
自定义success页面
1、在View/Public下新建一个success.html
提示信息:{$message} 跳转地址:{$jumpUrl}
2、修改配置文件,设置success页面
'TMPL_ACTION_ERROR' => "Public:success",
'TMPL_ACTION_SUCCESS'=> "Public:success",
获得url中参数的方式
1、通过$_GET来获得
$变量 = $_GET["参数名"];
2、通过给方法加参数
public function 方法名($参数名,$参数名,$参数名...)
{}
注意:
1)方法的参数名与url中的参数名必须相同
2)方法的参数的顺序必须url中参数的顺序相同
public function _initialize()
{}
表单验证例子:
模型:UserModel.class.php
class UserModel extends Model
{
protected $pathValodate = true;//是否批处理验证
//通过重写父类属性_validate实现表单验证
protected $_validate = array(
array('username', 'require', '用户名不能为空'),
//学历验证
array('user_xueli', '2,3,4,5', '必须选择一个学历',0, 'in'),
);
}
控制器:
$user = D('User');
if(!empty($_POST)) {
$z = $user -> create();
//通过create()方法实现数据收集,该方法对于非法的字段会自动进行过滤,集成表单验证,
if(!$z) {
var_dump($user->getError());//打印错误信息
exit();
}
$res = $user->add();
}
分页类:ThinkPHP/Librarys/Think/Page.class.php
1、导入分页类
use Think\Page;
2、实例化
$page = new Page(总记录数,每页记录数);
3、获得每页记录的起始值
$page->firstRow;
4、获得每页记录数
$page->listRows;
5、获得分页栏
$page->show();
验证码类:ThinkPHP\Library\Think\Verify.class.php
1、在控制器中新建一个方法,添加如下代码
use Think\Verify;
public function 方法()
{
$verify = new Verify();
$verify->length = 4;//设置字符的个数
$verify->fontSize = 13;//设置字符的大小
$verify->entry();//显示验证码
}
2、视图页面的代码
<img src="__APP__/控制器/方法">
3、比对验证码
$verify = new Verify();
$result = $verify->check(用户输入的验证码);
ThinkPHP自带的表单验证
1、新建模型文件,在模型中添加如下代码
public $_validate = array(
array("表单元素名","验证规则","提示信息"),
array("表单元素名","验证规则","提示信息"),
array("表单元素名","验证规则","提示信息"),
);
2、在控制器的指定方法中,添加如下代码
$model = D("模型名");
if($model->create())
{
//验证通过
}
else
{
//验证失败
$this->success($model->getError(),跳转地址);
}
文件上传类:ThinkPHP\Library\Think\Upload.class.php
单文件上传-----------------------
use Think\Upload.class.php
$upload = new Upload();//实例化
$upload->maxSize = 大小;
$upload->exts = array("jpg","rar","gif");//设置上传文件的类型
$uplaod->autoSub = false;//是否生成子目录
$upload->rootPath = "./";//上传文件的根目录
$upload->savePath = "";//保存目录
$result = $upload->uploadOne($_FILES["名"]);
if($result)
{
print_r($result);
}
else
{
$message = $upload->getError();
}
多文件上传-----------------------
use Think\Upload.class.php
$upload = new Upload();//实例化
$upload->maxSize = 大小;
$upload->exts = array("jpg","rar","gif");//设置上传文件的类型
$uplaod->autoSub = false;//是否生成子目录
$upload->rootPath = "./";//上传文件的根目录
$upload->savePath = "";//保存目录
$result = $upload->upload();
if($result)
{
print_r($result);
}
else
{
$message = $upload->getError();
}
注意:多文件上传不成功!修改Upload.class.php文件
'saveName' => array('uniqid', ''),
1)先在Common中自定义一个函数(为上传的文件,命名)
2)修改'saveName' => array('自定义函数名', ''),
Common文件夹的用法:定义公用函数
1、在Common文件夹下新建一个function.php
2、function.php文件名固定(该文件由系统自动加载)
3、控制器、视图都可以直接调用
控制器调用公用函数:直接调
函数名();
函数名(值,值...);
$变量 = 函数名(值,值...);
视图调用公用函数:配合着输出值的标签来使用
{$key,$key...|函数名}
{$key.下标|函数名}
{$key[下标]|函数名}
缓存Cache:提高网站的访问效率
缓存分类
1、按缓存数据存储位置不同
1)文件缓存
2)内存缓存
2、按缓存数据量不同
1)整站缓存
2)页面缓存
3)局部缓存(片段缓存)
4)局部不缓存
5)数据缓存(变量缓存)
ThinkPHP缓存:文件缓存、数据缓存(变量缓存)
1、数据缓存、快捷缓存
1)向缓存中添加数据
S(名,值,时间)
2)获得缓存中的数据
$变量 = S(名);
3)清除指定的缓存
S(名,NULL);
2、快速缓存
1)向缓存中添加数据
F(名,值);
2)获得缓存中的数据
$变量 = F(名);
3)清除指定的缓存
F(名,NULL);
3、查询缓存
$result = $model->cache(true,时间)->select();
$result = $model->cache(true,时间)->where()->find();
ThinkPHP知识点总结:
1、入口文件写法
2、目录结构
3、控制器
1)控制器的命名规则
2)方法的命名规则
3)控制器定义的语法格式
4)$this->display()
4、视图
1)存储位置
2)Think标签
5、公用html存储位置
1)View\Public
2)<include file="文件夹:文件名"/>
6、url路由
1)问号传参
2)pathinfo
7、系统常量
__APP__、__ROOT__、U()、{:U()}
8、模型
1)模型命名规则
2)模型定义的语法格式
3)获得模型对象
D()、M()
4)数据库操作
9、页面重定向
$this->redirect()
10、系统提示信息页面
$this->success();
$this->error();
自定义success页面
11、配置文件
application/Home/Conf/config.php
application/Common/Conf/config.php
library/ThinkPHP/Conf/convention.php
12、分页类
library/ThinkPHP/Library/Think/Page.class.php
13、上传类
library/ThinkPHP/Library/Think/Upload.class.php
14、验证码类
library/ThinkPHP/Library/Think/Verify.class.php
15、表单验证
16、Common用法
17、缓存
1)数据缓存
2)快速缓存
3)查询缓存
18、后台管理
19、给控制器找父类
1)控制器的父类
2)特殊的方法:_initialize()