thinkphp教程笔记总结

时间:2024.3.23

1、url的四种访问模式:

1) PATHINFO模式(重点)

Eg:http://域名/项目名/入口文件/模块名/方法名/键1/值1/键2/值2

2) 普通模式

Eg:http://域名/项目名/入口文件?m=模块名&a=方法名&键1=值1&键2=值2

3) REWRITE模式(重写模式)

需要增加配置文件 hac,服务器支持。

Eg:http://域名/项目名/模块名/方法名/键1/值1/键2/值2

4) 兼容模式

Eg:http://域名/项目名/入口文件?s=模块名/方法名/键1/值1/键2/值2

2、ThinkPHP输出:

1)PHP原生输出方法。Echo

2)通过display方法输出。想通过分配变量可以使用assign输出

3)修改定界符:修改配置项。避免与JQuery冲突

?THPL_L_DELIM?-〉?<{? 修改左定界符

?THPL_R_DELIM?-〉?<{? 修改右定界符

3、ThinkPHP 的模型使用

1)需要在方法中通过new Model (表名)的形式操作数据库

$m=new Model(?User?);

$arr=$m->sselect();

需要通过配置项来配置数据库(数据表名第一个字母大写)

还有一种简单使用模型的方法:

$m=M(?User?); //等效为 new Model

$arr=$m->sselect();

使用模型的实力可以对数据进行操作,操作的工作一般就是对数据库进行 增删改查。 增 c create $m->add()

删 d delete $m->delete()

改 u update $m->save()

查 r read $m->select()

4、ThinkPHP 3.1.2 CURD特性 

ThinkPHP 3 读取数据

1)对数据的读取 Read

$m=new Model('User');

$m=M('User');

a. select $m->select();//获取所有数据以数组形式返回

b. find $m->find($id);//获取单条数据

c. getField(字段名)//获取一个具体的字段值

$arr=$m->where('id=2')->getField('username'); //ThinkPHP的连贯操作

ThinkPHP 3 创建数据

对数据的添加 Create

$m=new Model('User');

$m=M('User');

$m->字段名=值

$m->add();

返回值是新增的id号

代码示例:

public function add(){

$m=new Model('User');

$m->username=$_POST['username'];

$m->sex=$_POST['sex'];

$newId=$m->add();

if($newId>0){

$this->success("Add new user successfully!!!",index);

}else{

$this->error("Add new user failed!!!",index); }

} 

ThinkPHP 3 删除数据

$m=M('User');

$m->delete(2); //删除id为2的数据

$m->where('id=2')->delete(); //与上面效果相同也是删除id为2的数据 返回值是受影响行数

ThinkPHP 3 更新数据

$m=M('User');

$data['id']=1;

$data['username']='ztz2';

$m->save($data);

返回值是受影响行

5、 ThinkPHP 3.1.2 查询方式

find只能查询一天记录,select可以查询多条记录 

一、普通查询方式 

字符串

$arr=$m->where("sex=0 and username='gege'")->find(); 

数组

$data['sex']=0;

$data['username']='gege';

$arr=$m->where($data)->find();

注意这种方式默认是and的关系如果使用or关系需要添加数组值 $data['sex']=0; $data['username']='gege';

$data['_logic']='or'; 

二、表达式查询方式

$data['id']=array('lt',6);

$arr=$m->where($data)->select();

EQ 等于

NEQ 不等于

GT 大于

EGT 大于等于

LT 小于

ELT 小于等于

示例代码:

public function show(){

$m=new Model('User');

$data['id']=array("LT",25);

$arr=$m->where($data)->select();

var_dump($arr);

$this->display(); }

LIKE 模糊查询

$data['username']=array('like','%ge'); //查询username以ge结尾的user

$data['username']=array('like','%ge%'); //查询username包含ge的user $arr=$m->where($data)->select(); 

NOTLIKE //注意not 和 like中间不能有空格

$data['username']=array('notlike','%ge%'); //查询username不包含ge的user $arr=$m->where($data)->select(); 

注意如果一个字段要匹配多个通配符

$data['username']=array('like',array('%ge%','%2%','%五%'),'and'); //如果没有第三个值默认关系是or关系

$arr=$m->where($data)->select();

BETWEEN

$data['id']=array('between',array(5,7));

$arr=$m->where($data)->select();

//SELECT * FROM `tp_user` WHERE ( (`id` BETWEEN 5 AND 7 ) )

$data['id']=array('not between',array(5,7));

//注意not 和 between中间一定要有空格

$arr=$m->where($data)->select(); 

IN

$data['id']=array('in',array(4,6,7));

$arr=$m->where($data)->select();

//SELECT * FROM `tp_user` WHERE ( `id` IN (4,6,7) ) $data['id']=array('not in',array(4,6,7)); not和in之间一定要有空格 $arr=$m->where($data)->select();

//SELECT * FROM `tp_user` WHERE ( `id` NOT IN (4,6,7) )

常用连贯操作

a) where 帮助我们设置查询条件

b) order 对结果进行排序

$arr=$m->order('id desc')->select();

$arr=$m->order(array('id'=>'desc','sex'=>'asc'))->select();

c) limit 限制结果

limit(2,5)

limit('2,5')

limit(10)//limit(0,10) d) field

d) 设置查询字段

field('username as name,id')

field(array('username'=>'name','id')

field('id',true) //获取除了id以外的所有字段

e) table

f) group

g) Having

h) 补充

i. alias 用于给当前数据表定义别名 字符串

ii. page 用于查询分页 内部会转换成limit 字符串和数字

iii. join* 用于对查询的join支持 字符串和数组

iv. union* 用于对查询的union支持 字符串、数组和对象

v. distinct 用于查询的distinct支持 布尔值

vi. lock 用于数据库的锁机制 布尔值

vii. cache 用于查询缓存 支持多个参数 以后在缓存部分再详细描述

viii. relation 用于关联查询 需要关联模型扩展支持 字符串

ix. validate 用于数据自动验证 数组

x. auto 用于数据自动完成 数组

xi. filter 用于数据过滤 字符串

xii. scope* 用于命名范围 字符串、数组

模板的使用

a) 规则

模板文件夹下[TPL]/[分组文件夹/][模板主题文件夹/]和模块名同名的文件夹[Index]/和方法名同名的文件[index].html.tpl

更换模板文件的后缀名

修改配置文件: 'TMPL_TEMPLATE_SUFFIX'=>'.html',//更改模板文件后缀名

b) 修改模板文件目录层次

'TMPL_FILE_DEPR'=>'_',//修改模板文件目录层次

c) 模板主题

'DEFAULT_THEME'=>'your',//设置默认模板主题

需要在TPL下面新建一个your文件夹作为模板主题文件

如何动态修改模板主题

1、在后台准备一个功能

修改config.php文件中的默认模板项

2、通过url传递 t=主题 参数可以修改不同的模板 (需三方同时使用)

'DEFAULT_THEME'=>'your', //设置默认模板主题

'TMPL_DETECT_THEME'=>true, //自动侦测模板主题

'THEME_LIST'=>'your,my', //支持的模板主题列表

模板的输出

a) display

1.display中没有参数

$this->display();

2.可以带参数

$this->display(本模块文件夹下的其他模板文件);

$this->display('index2');

$this->display(其他文件夹下的模板文件);

$this->display('Public:error'); //注意仅仅需要在Tpl下有Public文件夹以及其中的error.html即可不需要一定有Public模块

$this->display(其他主题下的 文件夹下的 模板文件);//需要开启主题支持 $this->display('my:Index:index');

$this->display(一个url路径);

$this->display('./Public/error.html');

$this->display('./Public/error.html','utf-8','text/xml'); //参数二为制定编码,

参数三为模版的输出类型。 $this->show($content); //参数也可以为: ?html代码?

3.fetch方法 获得模板文件中的内容以字符串形式返回

$content=$this->fetch('Public:error');

4.show方法 不需要模板文件可以直接输出模板内容

$content=$this->fetch('Public:error');

dump($content);

$content=str_replace('h1','i',$content);

$this->show($content);

模版赋值

1、 $this->assign(data,梁辉健);

2、 $this->name=”梁辉健”;

模版替换

a) __PUBLIC__会被替换成当前网站的公共目录 通常是 /Public/

b) __ROOT__ 会替换成当前网站的地址不含域名

c) __APP__ 会替换成当前项目的URL地址 不含域名

d) __GROUP__会替换成当前分组的URL地址 不含域名

e) __URL__ 会替换成当前模块的URL地址不含域名

f) __ACTION__会替换成当前操作的URL地址 不含域名

变量输出

1、标量输出

2、数组输出

{$name[1]}

{$name[?k2?]} / {4name.k1}:关联数组

3、对象输出

{$name:k} / {$name -> k} “name”为对象,”k”为类里面调用的函数。

系统变量:

使用函数:

{$name|strtoupper} 编译后

<?php echo (strtoupper($name)); ?>

{$name|date='y/m/d H:i:s',###} 编译后

<?php echo (date('y/m/d H:i:s',$name)); ?>

$this->assign('name'); :若是没有给name分配变量则可以在模版文件设置: {$name|default="这里是默认值"} 编译后

<?php echo (($name)?($name):"这里是默认值"); ?>

运算符:

+ - * / ++ -- : {$name+1}

导入 js css 文件

方法一:

<link rel="stylesheet" type="text/css" href="__PUBLIC__/Css/basic.css" /> <script src="__PUBLIC__/Js/Test.js" type="text/javascript"></script>

方法二:

<import type="js" file="Js/test" />

若是Js/Css文件不是放在Public文件目录下,可以增加一个路径参数

<import type="js" file="Js/test" basepath=”./Other” />

方法三:

<load file=”__PUBLIC__/Css/basic.css” /> (可自动检测文件属性)

分支结构

1、 If 结构

<ifcondition="$age lt 18">

未成年

<elseif condition="$age eq 18"/>

青春年少

<else/>

成年

</if> < : gt

> : lt

== : eq

<= : elt

>= : egt

!= : neq

=== : heq

!== : nheq

2、switch 结构

<switch name="number">

<case value="1">一个和尚挑水吃</case>

<case value="2">两个和尚抬水吃</case>

<case value="3">三个和尚没水吃</case>

<default/> 这里是默认值

</switch>

循环结构

1、for

<table border="1" width="500">

<for start="10" end="00" name="j" step="-2" comparison="gt">

<tr><td>{$j}</td><td>aaa</td></tr>/

</for>

</table>

注:开始值、结束值、步进值和循环变量都可以支持变量,开始值和结束值是必须,其他是可选。comparison 的默认值是lt;;name的默认值是i,步进值的默认值是1

2、Volist (遍历数组-- 多位,数值数组)

<volist name="list" id="v">

{$v.username}</br>

</volist>

3、Foreach(遍历数组,一维 )

<foreach name="list" item="v" key='k'>

{$k}--------- {$v}</br>

</foreach>

特殊标签

1、比较标签

eq或者 equal 等于 neq 或者notequal 不等于 大于 gt

大于等于 egt

小于 lt 小于等于 elt 恒等于 heq 不恒等于 nheq

例:<eq name=”0” value=”10”>输出10</else>输出不是十</eq>

2、范围标签 In: (notin)

<in name="n" value="9,10,11,12">在里面<else/> 不在里面</in>

Between: (notbetween)

<in name="n" value="1,10">在里面<else/> 不在里面</in>

也可以直接使用range标签,替换in和notin的用法:

<range name="id" value="1,2,3" type="in">输出内容1</range>

其中type属性的值可以用in或者notin。

3、Present(notpresnt):可以使用present标签来判断模板变量是否已经赋值

<present name="name">name已经赋值</present>

4、Empty(notempty):可以使用empty标签判断模板变量是否为空

<empty name="name">name为空值</empty>

5、Defined:判断常量是否已经定义

6、Define:可以使用define标签进行常量定义

7、Assign:模版中变量赋值

<assign name="var" value="123" />

其他标签的使用

1、在模版中直接使用PHP代码(不建议使用)

<php>echo "我是梁辉健"</php>

2、修改定界符

{$name} => <{$name}> 避免与js冲突

一、模版的包含

格式: <include file="完整模板文件名" />

<include file="read" />

<include file="Public:header" />

<include file="blue:User:read" />

<include file="$tplName" />

<include file="header" title="ThinkPHP框架"keywords="开源WEB开发框架"/> 在模版中变量 [$变量名] 接收

<include file='file1,file2' />

二、模版渲染

1、自动开启模版渲染,设置配置文件

?{__NOLAYOUT__}?=>?true?, //开启模版渲染模式

准备一个模版渲染页面,在页面使用{__CONTENT__}接收具体页面的内容

如果在某个具体模版中不希望使用喧嚷模版,可以在页首添加{__NOLAYOUT__}

2、不开启自动模版渲染可以在每一个具体页面的页首添加

<layout name=”layout”>

3、使用技巧

在渲染模版文件中

<include file="Public:header" />

{__CONTENT__}

<include file="Public:footer" />

三、模版的继承

<block name="title"><title>网站标题</title></block>

block标签必须指定name属性来标识当前区块的名称,这个标识在当前模板中应该是唯一的,block标签中可以包含任何模板内容,包括其他标签和变量,例如:

<block name="title"><title>{$web_title}</title></block>

你甚至还可以在区块中加载外部文件:

<block name="include"><include file="Public:header" /></block>

需要在子模版里面加入代码:<extend name="base" />

一、空模块和空操作

1、空操作

public function _empty($name){

$this->show('$name 不存在<a href="__APP__/Index/index">返回首页</a>'); }

2、空模块

class EmptyAction extends Action {

public function index(){

$name=MODEL_NAME;

$this->display('City:$name');

$this->show('<p> 该方法不存在</p>');

}

}

二、前置操作和后置操作

1、前置操作:__before__操作名

2、后置操作:__after__操作名

一、URL规则

1、默认是区分大小写的

2、如果不想区分大小写可以改配置文件

'URL_CASE_INSENSITIVE'=>'true', //URL不区分大小写

3、如果模块名为 UserGroupAction,那么url找模块就必须写成

http://localhost/ThinkPHP4/index.php/user_group/index

4、如果 'URL_CASE_INSENSITIVE'=>'false',那么url也可以写成 http://localhost/ThinkPHP4/index.php/UserGroup/index

二、伪静态

'URL_HTML_SUFFIX'=>'shtml|html|xml' //限制伪静态的后缀

三、URL路由

1、启动路由

要在配置文件中开启路由支持

2、使用路由

'URL_ROUTER_ON'=>'true',

'URL_ROUTE_RULES'=>array(

'year/:year\d/:mouth\d/:date\d'=>'Index/index'

),

1)规则表达式配置路由

'my'=>'Index/index' //静态地址路由

':id/:num'=>'Index/index' //动态地址路由

':my/:num'=>'Index/index' //动态和静态地址路由

'year/:year\d/:mouth\d/:date\d'=>'Index/index' //动态和静态地址路由 加上 \d 代表类型只能是数字。

'my/:id$'=>'Index/index' //加上$后面地址只能是 my/100不能再有其他内容。

2)正则表达式配置路由

'/^year\/(\d{4})\/(\d{2})\/(\d{2})/'=>'Index/index?year=:1&month=:2&date=:3',

? 越复杂的路由越往前面放

? 可以使用$作为完全匹配的路由规则

? 用正则匹配的方式

四、URL重写

五、URL生成

一、多赢用配置技巧

二、使用分组

三、页面调转

四、Ajax技巧

更多相关推荐:
Html_总结

Html简单总结一.概述1.什么是Html文件①.Html是一种描述网页的语言,英文全称是HypertextMarkedLanguage,中文全称是“超文本标记语言”②.它拥有自己的一套标记标签,它使用标记标签…

20xx年销售部年度总结ppt模板

小编给大家整理的销售部年度总结ppt模板,仅供参考。1、封面封面最好是公司的形象在上面,照片等。要有主题、汇报人、日期。如“XXX公司销售部半年度工作总结”,第二排小字体“汇报人:XXX”,第三排或在页底“年月…

手术室护士年终总结ppt模板

手术室护士年终总结ppt模板引导语工作总结往往是集精华和糟粕于一体的报告集智慧和才能于一体的报告集专业和水平于一体的报告下面是的小编整理的手术室护士年终总结ppt模板欢迎大家前来了解手术室护士年终总结ppt模板...

汽车销售经理年终总结ppt

引导语:汽车销售经理年终总结ppt来啦,20xx即将来临,你准备好汽车销售经理年终总结ppt了吗?为你推荐nbsp;回顾去年的工作,自已能够勤奋学习,努力工作,认真完成各项工作任务,积极参加局机关组织的各项政治…

儿科护士年总总结ppt模板

引导语:儿科护士年总总结ppt模板你是不是找不到呢?儿科护士年总总结ppt模板是小编精心为你推荐20xx年儿科护士年终总结?20xx年儿科护士年终总结哪里有范文?了20xx年儿科护士年终总结供护士们参考:时间过…

html网页资料总结

1html文件的命名规则1gt不能以数字开头由数字字母下划线组成2gt不要有中文有中文不一定出错但是不建议3gt见名识意2网页的扩展名html或者htm3Tab键缩进shifttab前进F12浏览网页F5刷新4...

常见html标签及属性的一些总结

常见html标签及属性的一些总结lthtmlgtltheadgtlttitlegtlttitlegtltheadgtltbodytextquotquotbgcolorquotquotbackroundquotq...

自己总结的html

第一章HTML1HTML的基本结构lthtmlgt根控制标记ltheadgt头控制标记lttitlegt标题lttitlegt标题标记ltheadgt头控制标记尾ltbodygt网页显示区域ltbodygtlt...

html简单总结

第一章总结今天学习表格设计主要为一些标签属性及属性值的学习主要的标签ltthgt行lttdgt列单元格lttrgt属性borderwidth宽height高cellspacingcellspaddingvlig...

Html,CSS,JS比较总结

1HTML超文本标记语言eglthtmlgtltheadgtlttitlegtHTMLlttitlegtltbodygtltpidquotnum1quotgtHelloWorldI39mHTMLltpgtltb...

常用html标记总结

一HTML的全局架构标签lthtmlgtltheadgtlttitlegt我是标题lttitlegtltheadgtltbodygt我是正文ltbodygtlthtmlgt二body标签中的相关属性1bgcol...

常用html标记总结

常用html标记总结txt心脏是一座有两间卧室的房子一间住着痛苦一间住着快乐人不能笑得太响否则会吵醒隔壁的痛苦一HTML的全局架构标签lthtmlgtltheadgtlttitlegt我是标题lttitlegt...

html总结ppt(5篇)