ThinkPHP
Posted yarightok
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ThinkPHP相关的知识,希望对你有一定的参考价值。
配置
默认配置 < 公共配置 < 模式配置 < 调试配置 < 场景配置 < 模块配置 < 扩展配置 < 动态配置。
C方法:C($name = null, $value = null, $default = null)
路由
普通模式:http://www.example.com/index.php?m=home&c=index&a=index
pathinfo模式:http://www.example.com/index.php/home/index/index
rewrite模式:http://www.example.com/ home/index/index
兼容模式:http://www.example.com/index.php?s=home/index/index
路由配置
“URL_ROUTER_ON” => true
“URL_ROUTE_RULES” => array (
… 路由表达式
)
路由表达式:
1、规则路由
2、正则路由
3、静态路由
控制器
伪静态
通过URL_html_SUFFIX设置伪静态的后缀
URL大小写
Windows不区分大小写,Linux区分。可设置参数:URL_CASE_INSENSITIVE = true 可实现URL不区分大小写,保持Windows与Linux一致
URL生成
U(地址表达式, 参数, 是否显示伪静态后缀, 是否显示域名)
地址表达式:
[模块/控制器/操作#锚点@域名]?参数1=值1&参数2=值2…
Ajax返回
ajaxReturn(变量[, ‘xml/json’)] 默认为json
重定向和页面跳转
redirect(URL地址表达式, URL变量, 延迟时间, 提示消息)
success(提示信息, 跳转地址, 跳转时间)
跳转地址:默认跳转$_SERVER[“HTTP_REFERER”]
跳转时间:默认1s
error(提示信息, 跳转地址, 跳转时间)
跳转地址:默认跳转javascript:history:back(-1);
跳转时间:默认3s
注:
redirect不可使用模板,只能输出字符串。
success/error可使用模板,默认为THINK_PATH.’Tpl/dispatch_jump.tpl’
“TMPL_ACTION_SUCCESS” 配置success模板
“TMPL_ACTION_ERROR” 配置error模板
读取输入
I(‘变量来源.变量名|修饰符’, [‘默认值’], [‘过滤方法’], [‘额外数据源’]
变量来源:
来源 |
说明 |
get |
$_GET |
post |
$_POST |
param |
自动判断$_GET、$_POST和$_PUT |
request |
$_REQUEST |
put |
$_PUT |
session |
$_SESSION |
cookie |
$_COOKIE |
server |
$_SERVER |
globals |
$_GLOBALS |
path |
获取PATHINFO模式的URL参数 |
data |
获取其他类型的参数,需要配合额外数据源 |
修饰符:
修饰符 |
说明 |
s |
强制转换为字符串 |
d |
强制转换为整数 |
b |
强制转换为布尔型 |
a |
强制转换为数组 |
f |
强制转换为浮点型 |
过滤方法:
1、没有指定:则采用配置”DEFAULT_FILTER”的值(默认为htmlspecialchars)
2、指定的为函数名:则直接使用该函数进行操作(可以是数组)
3、不是函数名:则调用内置的方法filter_var
4、不过滤:传false
HTTP请求方法
IS_GETIS_POSTIS_PUTIS_DELETEIS_AJAXREQUEST_METHOD
前置和后置操作
_before_actionname() _after_actioname()
动作参数绑定
functionname($para)
空操作
_empty($actionname)
空控制器
EmptyController.class.php
模型
模型实例化
1、new 模型类
2、M方法
3、D方法
模型方法
where ablealiasdatafield(可用来排除字段)orderlimitpagegrouphavingjoinuiondistinctlockcachefetchSql(返回sql,并不执行sql)strictindexcountmaxminavgsumquery(直接执行原生select语句)execute(直接执行原生insertupdatedelete语句)
CURD
create() 处理数据,默认自动读取$_POST的数据
add() 新增
getField() 获取某列
find() 读取单条数据
select() 读取数据集
save() 更新
setField() 更新指定字段
setDec() 对指定字段减操作
setInc() 对指定指定加操作
delete() 删除
where条件
1、可直接拼接字符串,存在sql注入风险
2、使用数组
3、使用对象
自动验证
静态方式:在模型类中通过$_validate定义
动态方式:使用模型类的validate方法
规则格式:
array(
array(字段名, 验证规则, 错误提示, [验证条件, 附加规则, 验证场景])
)
自动完成
静态方式:在模型类里面通过$_auto属性定义处理规则
动态方式:使用模型类的auto方法动态创建自动处理规则
规则格式:
array(
array(完成字段, 完成规则, [完成条件, 附加规则])
)
视图模型
需要
use ThinkModelViewModel
模型类 extends ViewMode
关联模型
需要
use ThinkModelRelationModel
模型类 extends RelationMode
关联关系:HAS_ONE, BELONGS_TO, HAS_MANY, MANY_TO_MANY
视图
视图目录/[模板主题]/控制器名/操作名+视图后缀
默认不启用 模板主题,可通过设置DEFAULT_THEME设置
视图后缀 默认为 .html,可通过 TMPL_TEMPLATE_SUFFIX 设置
视图目录 默认为 View,可通过 DEFAULT_V_LAYER 设置
模板赋值:
在控制器中,通过$this->assign(‘data’, $data)的方式进行赋值,这样在模板中可使用data获取数据。$data可以是数组。
模板渲染:
display([模板文件路径], [字符编码], [mime类型])
模板文件路径写法:
1、无参数:系统自动定位,默认为“模块名/View/控制器名/方法名.html”
2、[模块@][控制器:][操作]:比如$this->display(‘User:login’),将定位到“模块名/View/User/login.html”
3、完整模板文件名
fetch方法,返回模板内容,不会输出到浏览器,可用此方法开发页面缓存功能。
模板
变量输入格式
{$val}
默认的{}可通过设置“TMPL_L_DELIM”和”TMPL_R_DELIM”来替换
系统变量输出
$_SERVER、$_ENV、$_POST、$_GET、$_REQUEST、$_SESSION、$_COOKIE、配置文件
可通过
$Think.server.变量名
$Think.post.变量名
$Think.cookie.变量名
$Think.config.变量名
…
输出
函数使用
可使用PHP内置函数、ThinkPHP内置函数、用户自定义函数、类静态方法
格式:
{变量|函数1|函数2[…=参数1,参数2…]},如果参数是|前面的值,则可用###代替,
|类似管道的作用,函数从左到右求值后转入后续函数
变量默认值
{变量|default=默认值}
当变量为空时,显示默认值。 ?? default应该就是一个函数吧??
算术运算
{+、-、*、/、%}
注:
如果操作数是数组,则使用$arr[‘name’]的形式,不可使用arr.name
如果操作数是对象,则使用$obj->name的形式,不可使用obj->name
模板继承
在父模板中
<block name=”block名称”></block>
在子模板中
<extend name=”父模板文件名”/>
<block name=”父模板中的block名称”>内容</block>
视图包含
<include file=”模板表达式或模板文件路径”/>
模板表达式:
[模块@][主题/]控制器/操作 (/也可用:替换)
内置标签
includeimportvolistforeachforswitchcasedefaultcompare angepresent otpresentempty otemptydefined otdefineddefineassignifelseifelsephp(使用原生PHP语法<?php … ?>)
不解析输出:
<literal>
…里面的标签不会被解析
</literal>
模板布局
layout.html
<include file=”控制器名:header”/>
<div id=”content”>
{__CONTENT__}
</div>
<include file=”控制器名:footer”/>
index.html
<layout name=”控制器名:layout”/>
<p>正文</p>
模板常量
名称 |
常量 |
__ROOT__ |
当前网址(不包括域名) |
__APP__ |
当前应用的URL地址(不包括域名) |
__MODULE__ |
当前模块的URL地址(不包括域名) |
__CONTROLLER__ |
当前控制器的URL地址(不包括域名) |
__ACTION__ |
当前操作的URL地址(不包括域名) |
__SELF__ |
当前页面的URL |
在模板中直接填常量名称,不用{}包裹
调试
设置调试模式
define(‘APP_DEBUG’, true/false)
日志
LOG_RECORDED => true/false
LOG_LEVEL => ‘EMERG,ALERT,CRIT,ERR’
日志级别
日志级别 |
说明 |
EMERG |
严重错误,出现错误是程序无法运行 |
ALERT |
警戒性错误,必须立即被修正 |
CRIT |
临界值错误,超过临界值的错误 |
ERR |
一般错误 |
WARN |
警告错误 |
NOTICE |
通知级别错误 |
INFO |
信息级别 |
DEBUG |
调试输出 |
SQL |
SQL语句,调试模式下有效 |
LOG_TYPE => ‘File/Sae’
写入日志
record($message, $level=self::ERR, $record=false)
$record:是否强制记录
write($message, $level=self::ERR, $type=’’, $destination=’’)
变量输出
PHP内置:print_r、var_dump
ThinkPHP内置:dump
执行统计
G(‘start’);
//业务代码
G(‘end’);
echo G(‘start’, ‘end’).’秒’
SQL输出
getLastSql()
返回该模型最后执行的SQL语句
缓存
数据缓存
S($name, $value=’’, $options=null)
页面缓存
数据库查询缓存
session
ThinkPHP默认开启session, 可通过SESSION_AUTO_START设置
session(‘key’, ‘value’) 设置 其中key可以是user.userId 中间带.的形式
session(‘key’) 获取
session() 获取全部
session(‘key’, null) 删除
session(null) 删除全部
cookie
cookie(‘name’, ‘value); //有效期到浏览关闭
cookie(‘name’, ‘value’, 7*24*3600); //有效期一周
cookie(‘name’) 获取
cookie() 获取全部
cookie(‘name’, null) 删除
分页
$mode = new Mode(‘模型名称’);
$code => $mode -> count(); //总记录数
$page = new ThinkPage($code, 30); //实例化分页类,每页30行
$show = $page -> show(); //分页显示数据内容(即分页的导航条)
$list = $mode -> limit($page -> firstRow . ‘,’ . $page -> listRows) –> select();
$this->assign(‘list’, $list); //赋值数据集
$this->assign(‘page’, $show); //赋值分页输出
$this->display();
文件上传
$upload = new Upload(); //实例化上传类
$upload -> maxSize = 1024 * 1024 * 2; //2M
$upload -> exts = array(‘jpg’, ‘gif’, ‘png’, ‘jpeg’); //设置上传类型
$upload -> rootPath = ‘./Uploads/’; //设置上传根目录
$upload -> savePath = ‘’; //设置上传子目录
//上传文件
$info = $upload->upload();
if (!$info) {//上传出错
$this->error($upload->geError());
} else {
$filePath = ‘Uploads/’ . $info[‘file’][‘savepath’] . $info[‘file’][‘savename’];
}
其中’file’为页面input标签的name属性
默认的savePath为日期格式的文件夹
验证码
public function verify() {
$verify = new Verify(); //验证码类
$verify->entry(); //产生并输出验证码图片
}
前端页面中
<img src=”{:U(‘veryfy’)}” onClick=”this.src = ‘{:U(“verify”)}?’ + Math.random()” title=”看不清,换一张” >
验证
$code = I(‘code’);
$veryfy = new Verify();
if ($verify->check($code)) {
$this->success(‘验证成功’);
} else {
$this->error(‘验证码错误’);
}
图像处理
ThinkPHP的Image类支持GD库和Imagick库。
实例化
$path = ‘./Public/images/demo.jpg’;
$image = new Image(Image::IMAGE_GD, $path);
或者
$image = new Image(Image::IMAGE_IMAGICK, $path);
图像缩放
thumb($width, $height, $type = self::IMAGE_THUMB_SCALE)
$width:缩略图最大宽度
$height:缩略图最大高度
$type:缩略图剪裁类型
IMAGE_THUMB_SCALE 等比例缩放
IMAGE_THUMB_FIFLED 缩放后填充
IMAGE_THUMB_CENTER 居中
IMAGE_THUMB_NORTHWEST 左上角
IMAGE_THUMB_SOUTHEAST 右下角
IMAGE_THUMB_FIXED 固定尺寸缩放
图像裁剪
crop($w, $h, $x = 0, $y = 0, $width = null, $height = null)
$w:剪裁区域的宽度
$h:剪裁区域的高度
$x:剪裁区域横坐标
$y:剪裁区域纵坐标
$width:图片保存宽度
$height:图片保存的高度
图像水印
water($source, $locate = self::IMAGE_WATER_SOUTHEAST, $alpha = 80)
$source:水印图片路径
$locate:水印位置
$alpha:水印透明度
以上是关于ThinkPHP的主要内容,如果未能解决你的问题,请参考以下文章