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的主要内容,如果未能解决你的问题,请参考以下文章

Laragon实现快速创建ThinkPHP项目

php各种主流框架的优缺点

thinkphp2.x任意代码执行漏洞复现

php各种主流框架的优缺点总结

PHP四大主流框架的优缺点总结

php手记之01-tp5框架安装