一:视图
1.模板内容获取方法
Display方法:$this -> display(); 展示模版
Fetch方法:$this -> fetch(); 获取模版(有返回值)
将Fetch echo输出就是Display了打印方法:dump()
语法格式:dump(需要打印的变量); 封装在系统的函数库文件functions.php中
2.视图中的注释
html中的注释方法:<!—注释内容-->
在ThinkPHP中的模版注释:
行注释:{//行注释内容}
块注释:{/*块注释内容*/}
区别:普通的html注释属于客户端注释,会在浏览器的源代码中输出;而ThinkPHP中的模版注释则属于服务器端的注释,不会被浏览器输出。
注意: 行注释不要当作块注释来写(横跨多行), 在行注释和块注释当中(大括号里面)不要再出现大括号(模版变量)。3.变量的输出
在ThinkPHP中变量的分配(不考虑变量类型)都是使用assign语法格式:
$this -> assign(‘模版中的变量’,php中变量);
4.数组的输出关于数组在模版中输出的语法格式:
支持中括号形式:{$array[key]}
支持点形式:{$array.key}
在二维数组中:点形式和中括号形式,同样适用。
5.对象变量在php中输出一个对象的属性:可以通过$obj -> attr/$obj :: attr这种形式输出对象的属性。
在ThinkPHP的模版中输出属性的值,可以通过下面的两种方式来实现:
支持箭头形式:{$obj -> attr}
支持冒号形式:{$obj : attr}
注意: 在ThinkPHP模版中,在输出对象的属性的时候,千万不要使用点形式,因为ThinkPHP不允许将对象作为数组使用,会报错!6.系统变量
在ThinkPHP中系统提供了以下几个系统级别的变量(超全局变量在模版中的使用):
• $Think.server 等价于$_SERVER,获取服务器的相关信息
• $Think.get等价于$_GET,获取get请求的信息
• $Think.post 等价于$_POST,获取post请求中的信息
• $Think.request 等价于$_REQUEST,获取get和post中信息
• $Think.cookie等价于$_COOKIE,获取cookie中的信息
• $Think.session等价于$_SESSION,获取session中的信息
• $Think.config获取ThinkPHP中所有配置文件的一个总和,如果后面指定了元素,则获取指定的配置
上述7个系统变量的语法都是一样的,在模版中使用的语法格式是:
{$Think.xxx.具体的元素下标}
7.视图中使用函数
在实际开发的时候,有些变量在模版中不能直接使用。例:在数据表中存储的时间一般都是时间戳格式,在展示的时候需要处理格式化,这个时候可以使用视图中使用函数的方式来解决这个问题。
语法格式:
{$变量|函数名1|函数名2=参数1,参数2,###…}
参数说明:
$变量:模版变量
|:变量修饰符
函数名1:表示需要使用的第一个函数
函数名2:表示需要使用的第二个函数
参数1、参数2:函数2的参数
=:其实就是表示该函数有参数,类似于php中的函数名后面的()
###:表示变量的自身
例:{$time|date='Y-m-s H:i:s',###}
注意:当需要使用的函数只有一个参数并且参数是变量自身的时候,###可以省略不写;当需要使用的函数有多个参数,但是其第一个参数是变量自身的时候,也可以省略不写###;
8.默认值
默认值:就是当某个变量不存在或者为空的时候,就会显示默认的字符,默认的字符就是变量的默认值。
语法:
{$变量名|default=默认值} 集合视图中使用函数的语法格式,可以得知default其实是ThinkPHP中封装的一个函数,默认值是函数的参数
9.运算符
在ThinkPHP中同样支持在模版中对变量进行运算:
• +{$a+$b}计算变量a加上变量b的结果
• -{$a-$b}计算变量a减去变量b的结果
• *{$a*$b}计算变量a乘以变量b的结果
• /{$a/$b}计算变量a除以变量b的结果
• %{$a%$b}计算变量a除以变量b的余数
• ++ {$a++} 或 {++$a} 自增运算
• -- {$a--} 或 {--$a} 自减运算
10.文件包含
在实际开发的时候一般情况会把网站的公共部分,如头部、尾部等部分可以单独的存放到一个文件中,在后期的时候可以直接引入该部分,在后期维护的时候只需要维护一份代码就可以;如果说首尾等公共部分不单独拿出来,会造成2个问题,一个是代码重复,再者就是在后期维护的时候很麻烦。
在ThinkPHP中系统提供了一个模版标签,可以让我们引入一些公共部分的代码文件,这个标签是include标签:
语法: <include file=’需要引入的模版文件’ />说明:路径可以是相对路径,但是相对于入口文件的。还可以写成简便写法:
<include file=’View目录名/模版文件名’ /> 注:模板文件名不加后缀
除了使用include标签来引入文件之外,include标签还有另外一个用法:用来传递参数给引入的模版文件。
<include file=’需要引入的模版文件’ 参数名=’参数值’ />
上述的语法格式是给引入文件传递一个参数,参数名的名字就是后面的参数名,值就是后面的值。
11.循环遍历
在ThinkPHP中系统提供了2个标签来实现数组在模版中的遍历:
volist标签、foreach标签。
区别:volist除了上述的name和id属性对之外,还支持更多的属性对,如mod、key、length等等,而foreach标签除了上述的name和item之外只支持key属性对。可以理解成foreach标签是volist标签的一个简化版本。
具体使用可以查看手册:手册非常全面,甚至可以用来调错。
12.if标签
在ThinkPHP中if标签也是用于流程控制的。
If标签的语法格式:
<if condition=’条件表达式’>
输出结果1
<elseif condition=’条件表达式2’/> 注意此处的"/",不要遗忘,会报错
输出结果2
<elseif condition=’条件表达式3’/> 注意此处的"/",不要遗忘,会报错
…
<else/>
最后一个输出
</if>
13.php标签
Php标签就是指在模版中使用php语法格式。
模版中的php标签ThinkPHP支持2种形式:
第一种:PHP内置的php标签;语法格式:<?php PHP代码段?>
第二种:ThinkPHP封装的php标签;语法格式:<php>PHP代码段</php>
在实际开发的时候一般情况不建议在模版中使用php标签,在配置项中有一个配置项可以禁用php标签,配置项叫做:TMPL_DENY_PHP
禁用php标签之后,只是禁用掉原始的php标签,并不会禁用ThinkPHP封装的php标签。但是不建议禁用,原因是系统的跳转方法的模版文件使用了原生的php标签。
二:模型
1.配置数据库连接
注意:不要在主配置文件里配置数据库的连接信息,最好在应用级别的配置文件中配置数据库,一般一个应用使用一个数据库。
2.模型的创建
命名规范:模型名(要求是不带前缀的表名并且首字母大写)+Model关键词+.class.php
代码结构规范:
第一步:声明命名空间;
第二步:引入父类模型Model.class.php;
第三步:声明模型并且继承父类模型;
注意: 空模型也能进行数据表的基本操作( CURD ), 因为模型继承了父类,所以可以执行基本的操作。3.普通实例化方法
普通实例化方法是指通过自己编写代码来new一个对象。
$obj = new 类名();
在控制器中定义一个方法来实例化模型,使用的是普通方式实例化。
4.快速实例化方法
ThinkPHP为了简单、快速、高效开发,为我们提供了2个快速方法可以对模型进行实例化操作:
M方法和D方法。D方法实例化:
$obj = D([‘模型名’]);
表达的含义:实例化我们自己创建的模型(分组/Model目录中);如果传递了模型名,则实例化指定的模型,如果没有指定或者模型名不存在,则直接实例化父类模型(Model.class.php)。
M方法实例化:
$obj = M([‘不带前缀的表名’]);
表达的含义:直接实例化父类模型(Think目录下的Model.class.php);如果指定了表名,则实例化父类模型的时候关联指定的表;如果没有指定表名(没有传递参数)则不关联表,一般用于执行原生的sql语句(M() -> query(原生的sql语句))。
区别:D方法是实例化自定义模型,如果自定义模型不存在,则实例化父类模型;M方法本身就是直接实例化父类模型。两者的差异就是实例化的对象不一样。
具体使用:如果需要使用的操作父类中已经封装好了,则可以直接实例化父类(使用M方法),如果父类中方法不能满足我们的开发需要求,需要自己定义方法,则这个时候可以使用D方法实例化自定义模型。
5.CURD操作
5.1增
在ThinkPHP中系统给我们封装好了模型中的方法,可以通过方法来实现数据的增加操作,这个方法叫做add方法:
$model -> add(一维数组);
一维数组要求必须是键值(关联)数组,键必须和数据表中字段名要匹配,如果不匹配则在增加的时候会被ThinkPHP过滤掉。
Add方法的返回值是新增记录的主键id。
补充:如果需要添加多个记录怎么去实现呢?
方法1:可以循环使用add方法;
方法2:可以使用另外一个方法addAll,语法:$model -> addAll(二维数组);
要求:最里面的那层数组也是关联数组(也要求键名字和数据表字段匹配),外层数组必须是下标从0开始的连续索引数组。
注:addAll方法使用起来需要注意的点太多,谨慎使用。
5.2修改
在ThinkPHP中使用的是save方法,语法格式:
$model -> save(一维关联数组);
条件需要一维关联数组必须要有主键信息。如果没有主键信息,则相当于批量修改,在ThinkPHP中,系统为了防止误操作,不允许批量修改。
5.3查询
在ThinkPHP中系统封装了方法可以直接用于查询:select方法、find方法。
Select方法语法:
$model -> select();表示查询全部的信息
$model -> select(id); 表示查询指定id的信息 //一般不使用
$model -> select(‘id1,id2,id3,id4….’);表示查询指定id集合的信息,等价于mysql中in语句
Find方法语法:
$model -> find(); 表示查询当前表中的第一条记录,相当于limit 1;
$model -> find(id);表示查询表中的指定id的记录;
返回值:
Select方法返回值是一个二维数组,即时查询的是一条记录返回也是二维数组;find返回值是一维数组。
5.4删除操作
在ThinkPHP中可以使用系统封装的方法delete方法:
$model -> delete(); //不能使用,删除方法必须要有条件,不能执行没有条件的删除
$model -> delete(id); 删除指定id对应的记录
$model -> delete(‘id1,id2,id3….’); 删除多个id对应的记录
关于删除的说明:
删除分为两种删除:物理删除、逻辑删除。
物理删除:是指真删除,是从数据库里彻底删除。
逻辑删除:是指假删除,本质是修改操作。在数据表中定义一个状态字段,比如说status,取值是0或者1,在查询的时候读取状态是1的;当用户点击删除之后触发修改操作,将状态从1修改成0。因为查询只查询状态是1的,所以0的就不会被显示在页面上。