thinkphp教程笔记总结.docx
《thinkphp教程笔记总结.docx》由会员分享,可在线阅读,更多相关《thinkphp教程笔记总结.docx(17页珍藏版)》请在冰豆网上搜索。
![thinkphp教程笔记总结.docx](https://file1.bdocx.com/fileroot1/2023-4/24/e9a8efc9-9b3c-442d-83b8-bf1f52e808d0/e9a8efc9-9b3c-442d-83b8-bf1f52e808d01.gif)
thinkphp教程笔记总结
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)需要在方法中通过newModel(表名)的形式操作数据库
$m=newModel(‘User’);
$arr=$m->sselect();
需要通过配置项来配置数据库(数据表名第一个字母大写)
还有一种简单使用模型的方法:
$m=M(‘User’);//等效为newModel
$arr=$m->sselect();
使用模型的实力可以对数据进行操作,操作的工作一般就是对数据库进行增删改查。
增ccreate$m->add()
删ddelete$m->delete()
改uupdate$m->save()
查rread$m->select()
4、ThinkPHP3.1.2CURD特性
ThinkPHP3读取数据
1)对数据的读取Read
$m=newModel('User');
$m=M('User');
a.select$m->select();//获取所有数据以数组形式返回
b.find$m->find($id);//获取单条数据
c.getField(字段名)//获取一个具体的字段值
$arr=$m->where('id=2')->getField('username');//ThinkPHP的连贯操作
ThinkPHP3创建数据
对数据的添加Create
$m=newModel('User');
$m=M('User');
$m->字段名=值
$m->add();
返回值是新增的id号
代码示例:
publicfunctionadd(){
$m=newModel('User');
$m->username=$_POST['username'];
$m->sex=$_POST['sex'];
$newId=$m->add();
if($newId>0){
$this->success("Addnewusersuccessfully!
!
!
",index);
}else{
$this->error("Addnewuserfailed!
!
!
",index);}
}
ThinkPHP3删除数据
$m=M('User');
$m->delete
(2);//删除id为2的数据
$m->where('id=2')->delete();//与上面效果相同也是删除id为2的数据
返回值是受影响行数
ThinkPHP3更新数据
$m=M('User');
$data['id']=1;
$data['username']='ztz2';
$m->save($data);
返回值是受影响行
5、ThinkPHP3.1.2查询方式
find只能查询一天记录,select可以查询多条记录
一、普通查询方式
字符串
$arr=$m->where("sex=0andusername='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小于等于
示例代码:
publicfunctionshow(){
$m=newModel('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`BETWEEN5AND7))
$data['id']=array('notbetween',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('notin',array(4,6,7));not和in之间一定要有空格
$arr=$m->where($data)->select();
//SELECT*FROM`tp_user`WHERE(`id`NOTIN(4,6,7))
常用连贯操作
a)where帮助我们设置查询条件
b)order对结果进行排序
$arr=$m->order('iddesc')->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('usernameasname,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}编译后
phpecho(strtoupper($name));?
>
{$name|date='y/m/dH:
i:
s',###}编译后
phpecho(date('y/m/dH:
i:
s',$name));?
>
$this->assign('name');:
若是没有给name分配变量则可以在模版文件设置:
{$name|default="这里是默认值"}
编译后
phpecho(($name)?
($name):
"这里是默认值");?
>
运算符:
+-*/++--:
{$name+1}
导入jscss文件
方法一:
方法二:
若是Js/Css文件不是放在Public文件目录下,可以增加一个路径参数
方法三:
(可自动检测文件属性)
分支结构
1、If结构
未成年
青春年少
成年
<:
gt
>:
lt
==:
eq
<=:
elt
>=:
egt
!
=:
neq
===:
heq
!
==:
nheq
2、switch结构
一个和尚挑水吃
两个和尚抬水吃
三个和尚没水吃
这里是默认值
循环结构
1、for
{$j} | aaa |
/
注:
开始值、结束值、步进值和循环变量都可以支持变量,开始值和结束值是必须,其他是可选。
comparison的默认值是lt;;name的默认值是i,步进值的默认值是1
2、Volist(遍历数组--多位,数值数组)
{$v.username}
3、Foreach(遍历数组,一维)
{$k}---------{$v}
特殊标签
1、比较标签
eq或者equal
等于
neq或者notequal
不等于
gt
大于
egt
大于等于
lt
小于
elt
小于等于
heq
恒等于
nheq
不恒等于
例:
输出10输出不是十
2、范围标签
In:
(notin)
在里面不在里面
Between:
(notbetween)
在里面不在里面
也可以直接使用range标签,替换in和notin的用法:
输出内容1
其中type属性的值可以用in或者notin。
3、Present(notpresnt):
可以使用present标签来判断模板变量是否已经赋值
name已经赋值
4、Empty(notempty):
可以使用empty标签判断模板变量是否为空
name为空值
5、Defined:
判断常量是否已经定义
6、Define:
可以使用define标签进行常量定义
7、Assign:
模版中变量赋值
其他标签的使用
1、在模版中直接使用PHP代码(不建议使用)
echo"我是梁辉健"
2、修改定界符
{$name}=><{$name}>避免与js冲突
一、模版的包含
格式:
header"/>
User:
read"/>
在模版中变量[$变量名]接收
2、模版渲染
1、自动开启模版渲染,设置配置文件
‘{__NOLAYOUT__}’=>’true’,//开启模版渲染模式
准备一个模版渲染页面,在页面使用{__CONTENT__}接收具体页面的内容
如果在某个具体模版中不希望使用喧嚷模版,可以在页首添加{__NOLAYOUT__}
2、不开启自动模版渲染可以在每一个具体页面的页首添加
3、使用技巧
在渲染模版文件中
header"/>
{__CONTENT__}
footer"/>
3、模版的继承
网站标题
block标签必须指定name属性来标识当前区块的名称,这个标识在当前模板中应该是唯一的,block标签中可以包含任何模板内容,包括其他标签和变量,例如:
{$web_title}
你甚至还可以在区块中加载外部文件:
header"/>
需要在子模版里面加入代码:
1、空模块和空操作
1、空操作
publicfunction_empty($name){
$this->show('$name不存在返回首页');
}
2、空模块
classEmptyActionextendsAction{
publicfunctionindex(){
$name=MODEL_NAME;
$this->display('City:
$name');
$this->show('
该方法不存在
');
}
}
2、前置操作和后置操作
1、前置操作:
__before__操作名
2、后置操作:
__after__操作名
1、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
2、伪静态
'URL_HTML_SUFFIX'=>'shtml|html|xml'//限制伪静态的后缀
3、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'