select());}}8.有时,你可能想使用原生的SQL语句进行操作数据库。那么可以采用实例化空模型基类或者空M()方法。
query("SELECT*FROMthink_userWHEREuser='蜡笔小新'"));}}三.字段定义每个模型类操作着每个对应的数据表,在大多数情况下,系统会自动获取当前数据表的字段信息。而当模型类第一次实例化时,系统会自动缓存字段,并且永久缓存,除非删除了运行时缓存或者设置不缓存。如果调试模式下,则不会生成字段缓存文件,每次都是从数据表里重新获取。生成缓存的目的显而易见,就是为了快速响应。ThinkPHP默认是开启字段缓存,因为在实际运行中,不会更改字段结构。字段缓存文件保存在Runtime/Data/_fields/目录里,当你在开发阶段,字段和表会经常变动,所以要关闭缓存。关闭缓存的方法为:
//关闭字段缓存'DB_FIELDS_CACHE'=>false//开启了调试模式,自动关闭PS:如果开启缓存状态,新增了字段,那么可能新字段无法刷新出来,必须删除/Data/_fields文件夹,重新获取字段。
getDbFields());}}可以使用手动定义数据表字段的方式取代字段缓存方式,这种方式可以提高性能,避免IO开销。
getDbFields());}}ThinkPHP--模型操作部分-数据库操作-SQL查询语句一.查询方式ThinkPHP提供了三种基本的查询方式:字符串条件查询、索引数组条件查询和对象条件查询。在大多数情况下,推荐使用索引数组和对象方式作为查询条件,因为会更加安全1.使用字符串作为条件查询
where('id=1')->select());//连贯操作:user指向where,where本身又返回的user对象所以还能指向select}}最终生成的SQL语句:SELECT*FROM`think_user`WHERE(id=1)2.使用索引数组作为查询条件
where($condition)->select());//只需要传变量就可以了不需要写字符串形式}}最终生成的SQL语句:SELECT*FROM`think_user`WHERE(`id`=1)AND(`user`='蜡笔小新')索引数组查询的默认逻辑关系是AND,如果想改变为OR,可以使用_logic定义查询逻辑。
where($condition)->select());//只需要传变量就可以了不需要写字符串形式}}最终生成的SQL语句:SELECT*FROM`think_user`WHERE(`id`=1)OR(`user`='蜡笔小新')3.使用对象方式来查询
where($map)->select());}}最终生成的SQL语句:SELECT*FROM`think_user`WHERE(`id`=1)(2)NEQ表达式不等于(<>)
)$user=M('User');$map['id']=array('neq',1);//where为id<>1var_dump($user->where($map)->select());}}最终生成的SQL语句:SELECT*FROM`think_user`WHERE(`id`<>1)(3)GT表达式大于(>)
)$user=M('User');$map['id']=array('gt',1);//where为id>1var_dump($user->where($map)->select());}}最终生成的SQL语句:SELECT*FROM`think_user`WHERE(`id`>1)(4)EGT表达式大于等于(>=)
=)$user=M('User');$map['id']=array('egt',1);//where为id>=1var_dump($user->where($map)->select());}}最终生成的SQL语句:SELECT*FROM`think_user`WHERE(`id`>=1)(5)LT表达式小于(<)
where($map)->select());}}最终生成的SQL语句:SELECT*FROM`think_user`WHERE(`id`<2)(6)ELT表达式小于等于(<=)
where($map)->select());}}最终生成的SQL语句:SELECT*FROM`think_user`WHERE(`id`<=1)(7)[NOT]LIKE表达式模糊查询
where($map)->select());}}最终生成的SQL语句(包含小字的):SELECT*FROM`think_user`WHERE(`user`LIKE'%小%')
where($map)->select());}}最终生成的SQL语句(不包含小字的):SELECT*FROM`think_user`WHERE(`user`NOTLIKE'%小%')
where($map)->select());}}最终生成的SQL语句(包含小还包含蜡字):SELECT*FROM`think_user`WHERE((`user`LIKE'%小%'AND`user`LIKE'%蜡%'))(8)[NOT]BETWEEN表达式(不在)区间查询
where($map)->select());}}最终生成的SQL语句(范围在id1-3):SELECT*FROM`think_user`WHERE((`id`BETWEEN'1'AND'3'))
where($map)->select());}}最终生成的SQL语句(范围不在id1-3):SELECT*FROM`think_user`WHERE((`id`NOTBETWEEN'1'AND'3'))(9)[NOT]IN表达式(不在)IN查询
where($map)->select());}}最终生成的SQL语句(范围在id是1,2,4):SELECT*FROM`think_user`WHERE(`id`IN('1','2','4'))
where($map)->select());}}最终生成的SQL语句(范围不在id是1,2,4):SELECT*FROM`think_user`WHERE(`id`NOTIN('1','2','4'))(10)EXP表达式查询支持SQL语法
where($map)->select());}}最终生成的SQL语句(范围在id是1,2,4)SELECT*FROM`think_user`WHERE((`id`in(1,2,4)))
where($map)->select());}}最终生成的SQL语句:SELECT*FROM`think_user`WHERE((`id`=1))OR((`user`="蜡笔小新"))三.快捷查询快捷查询方式是一种多字段查询的简化写法,在多个字段之间用'|'隔开表示OR,用'&'隔开表示AND。1.不同字段相同查询条件
where($map)->select());}}最终生成的SQL语句(user=蜡笔小新或者email=蜡笔小新):SELECT*FROM`think_user`WHERE((`user`='蜡笔小新')OR(`email`='蜡笔小新'))2.不同字段不同查询条件
true);var_dump($user->where($map)->select());}}最终生成的SQL语句(查询ID=1,user=蜡笔小心的):SELECT*FROM`think_user`WHERE((`id`=1)AND(`user`='蜡笔小新'))注意:设置'_multi'为true,是为了让id对应1,让user对应'蜡笔小新',否则就会出现id对应了1还要对应'蜡笔小新'的情况。而且,这设置要在放在数组最后。
true);var_dump($user->where($map)->select());}}最终生成的SQL语句(查询ID>0的,user=蜡笔小新):SELECT*FROM`think_user`WHERE((`id`>0)AND(`user`='蜡笔小新'))四.区间查询ThinkPHP支持对某个字段的区间查询。
where($map)->select());}}最终生成的SQL语句(查询ID>1的并且ID<4的):SELECT*FROM`think_user`WHERE((`id`>1)AND(`id`<4))
where($map)->select());}}最终生成的SQL语句(查询ID>1或者ID<4的):SELECT*FROM`think_user`WHERE((`id`>1)OR(`id`<4))五.组合查询组合查询是基于索引数组查询方式的一个扩展性查询,添加了字符串查询(_string)、复合查询(_complex)、请求字符串查询(_query),由于采用的是索引数组,重复的会被覆盖。方式一:安全性低
where($map)->select());}}最终生成的SQL语句(查询ID=1并且user=蜡笔小新并且email=xiaoxin@163.com):SELECT*FROM`think_user`WHERE(`id`=1)AND(user="蜡笔小新"ANDemail="xiaoxin@163.com")方式二:全部以连接符(安全推荐)
where($map)->select());}}最终生成的SQL语句(查询ID=1并且user=蜡笔小新并且email=xiaoxin@163.com):SELECT*FROM`think_user`WHERE(`id`=1)AND(`user`='蜡笔小新'OR`email`='xiaoxin@163.com')方式三:
where($map)->select());}}最终生成的SQL语句(查询ID=1或者user=小或者ID=3):SELECT*FROM`think_user`WHERE((`user`LIKE'%小%')OR(`id`=1))OR(`id`=3)六.统计查询ThinkPHP提供了一些数据统计查询的方法。统计查询出几个字段
count());}}统计查询出几个字段:string'2'(length=1)语句:SELECTCOUNT(*)AStp_countFROM`think_user`LIMIT1统计查询出几个字段(遇到空不统计)
count('email'));}}统计查询出几个字段(遇到空不统计):string'2'(length=1)语句:SELECTCOUNT(email)AStp_countFROM`think_user`LIMIT1最大值:
max('id'));}}统计查询最大值:string'2'(length=1)语句:SELECTMAX(id)AStp_maxFROM`think_user`LIMIT1最小值:
min('id'));}}查询最小值:string'1'(length=1)语句:SELECTMIN(id)AStp_minFROM`think_user`LIMIT1平均值:
avg('id'));}}查询平均值:string'1.5000'(length=6)语句:SELECTAVG(id)AStp_avgFROM`think_user`LIMIT1总和:
sum('id'));}}查询总和值:string'3'(length=1)语句:SELECTSUM(id)AStp_sumFROM`think_user`LIMIT1七.动态查询借助PHP5语言的特性,ThinkPHP实现了动态查询。1.getBy动态查询
getByemail('xiaoxin@163.com'));}}查找email=xiaoin@163.com的数据sql语句:SELECT*FROM`think_user`WHERE(`email`='xiaoxin@163.com')LIMIT12.getFieldBy动态查询
getFieldByUser('蜡笔小新','id'));}}通过user得到蜡笔小新相对应id值string'1'(length=1)语句:SELECT`id`FROM`think_user`WHERE(`user`='蜡笔小新')LIMIT1八.SQL查询ThinkPHP支持原生SQL查询。1.query读取
query('SELECT*FROMthink_user'));}}查询think_user表sql语句:SELECT*FROMthink_user2.execute写入
where('idin(1,2,3)')->order('dateDESC')->limit(2)->select());}}查询id=1,2,3里的前俩个数据sql语句:SELECT*FROM`think_user`WHERE(idin(1,2,3))ORDERBYdateDESCLIMIT2注意:这里的where、order和limit方法都是连贯操作方法,所以它们都能返回$user本身,可以互换位置。而select方法不是连贯方法,需要放在最后,用以显示数据集。
where('id=3')->delete());}}把ID=3的删除DELETEFROM`think_user`WHERE(id=3)二.连贯方法1.wherewhere方法支持字符串条件、数组条件(推荐用法)和多次调用。字符串方式(不推荐)
where('id=1')->select());}}查询ID=1的sql语句:SELECT*FROM`think_user`WHERE(id=1)索引数组方式
where($map)->select());}}查询ID=1的sql语句:SELECT*FROM`think_user`WHERE(`id`=1)多次调用方式
where($map)->where('user="蜡笔小新"')->select());}}查询ID=1并且user=蜡笔小新的sql语句:SELECT*FROM`think_user`WHERE(`id`=1)AND(user="蜡笔小新")2.orderorder用于对结果集排序。倒序
order('iddesc')->select());//正序默认或ASC}}查询ID倒序的sql:SELECT*FROM`think_user`ORDERBYiddesc数组形式防止字段和mysql关键字冲突
order(array('id'=>'DESC'))->select());}}查询ID倒序的sql:SELECT*FROM`think_user`ORDERBY`id`DESC3.feildfeild方法可以返回或操作字段,可以用于查询和写入操作。只显示id和user两个字段
field('id,user')->select());}}只显示id和user两个字段的sql:SELECT`id`,`user`FROM`think_user`使用SQL函数和别名
field('SUM(id)ascount,user')->select());}}统计ID的总和和别名:SELECTSUM(id)ascount,`user`FROM`think_user`使用数组参数结合SQL函数
field(array('id','LEFT(user,3)'=>'left_user'))->select());}}取id和user的前三位把别名改变为left_user直接指向left_user:SELECT`id`,LEFT(user,3)AS`left_user`FROM`think_user`获取所有数据
field()->select());//可以传入*号,或者省略方法}}获取所有数据sql:SELECT*FROM`think_user`3.limitlimit方法主要用于指定查询和操作的数量。限制结果集数量
limit(2)->select());}}只显示俩条sql:SELECT*FROM`think_user`LIMIT2分页查询
limit(0,2)->select());//0代表从第1条开始,2代表显示俩条}}从第1条开始每页显示俩条sql:SELECT*FROM`think_user`LIMIT0,24.pagepage方法完全用于分页查询。
page(1,2)->select());//1代表第一页,2代表每页显示俩条}}从第1条开始每页显示俩条sql:SELECT*FROM`think_user`LIMIT0,25.tabletable方法用于数据表操作,主要是切换数据表或多表操作。
table('think_info')->select());}}切换到think_info这张表:SELECT*FROM`think_info`获取简化表名
table('__USER__')->select());//__INFO__尚可}}切换到think_info这张表:SELECT*FROM`think_user`多表查询
field('a.id,b.id')->table('__USER__a,__INFO__b')->select());}}查询双表think_usera,think_infob语句:SELECTa.id,b.idFROMthink_usera,think_infob数组形式夺标查询
field('a.id,b.id')->table(array('think_user'=>'a','think_info'=>'b'))->select());}}语句:SELECTa.id,b.idFROM`think_user``a`,`think_info``b`6.aliasalias用于设置数据表别名
alias('a')->select());}}设置数据表的别名为think_usera语句:SELECT*FROMthink_usera7.groupgroup方法通常用于对结合函数统计的结果集分组。
field('user,max(id)')->group('id')->select());}}以ID进行分组:SELECT`user`,max(id)FROM`think_user`GROUPBYid8.havinghaving方法一般用于配合group方法完成从分组的结果中再筛选数据。
field('user,max(id)')->group('id')->having('id>2')->select());}}sql语句:SELECT`user`,max(id)FROM`think_user`GROUPBYidHAVINGid>29.commentcomment方法用于对SQL语句进行注释
comment('所有用户')->select());}}sql注释语句:SELECT*FROM`think_user`/*所有用户*/10.joinjoin方法用于多表的连接查询。
join('think_userONthink_info.id=think_user.id')->select());//__USER__和__INFO__代替}}查看think_info.id表和think_user.id表ID是否一样语句:SELECT*FROM`think_user`INNERJOINthink_userONthink_info.id=think_user.id11.unionunion方法用于合并多个SELECT的结果集
union("SELECT*FROMthink_info")->select());}}合并think_user和think_info的结果集语句:SELECT*FROM`think_user`UNIONSELECT*FROMthink_info12.distinctdistinct方法用于返回唯一不同的值
distinct(true)->field('user')->select());}}返回不重复的user语句:SELECTDISTINCT`user`FROM`think_user`13.cachecache用于查询缓存操作
cache(true)->select());}}查询think_user表用缓存语句:SELECT*FROM`think_user`注意:第一次查询数据库,第二次查询相同的内容直接调用缓存,不用再查询数据库三.命名范围命名范围其实就是将SQL语句封装在模型定义类里,而不在控制器里。这样的分层操作有利于代码的可读性,避免开发人员在写CURD操作时出现问题。架构人员只要在命名范围内合理的规划即可,类似于架构师架构了接口,让开发人员面向接口开发一样。要使用命名范围,第一步要定义属性:Weibo\Home\Model\UserModel.class.php
array('where'=>array('id'=>1),),'sql2'=>array('order'=>'dateDESC','limit'=>2,),'default'=>array('where'=>array('id'=>2),),);}命名范围支持的属性有:where、field、order、table、limit、page、having、group、lock、distinct、cache。调用端:单个scope方法
scope('sql1')->select());//scope方法调用}}调用Weibo\Home\Model\UserModel.class.php里的sql1语句:SELECT*FROM`think_user`WHERE(`id`=1)多个scope方法
scope('sql1')->scope('sql2')->select());}}调用Weibo\Home\Model\UserModel.class.php里的sql1和sql2default默认
scope()->select());//传递default也行}}调用Weibo\Home\Model\UserModel.class.php里的default语句:SELECT*FROM`think_user`WHERE(`id`=2)对命名范围的SQL进行调整
scope('sql2',array('limit'=>4))->select());}}调用Weibo\Home\Model\UserModel.class.php里的sql2把'limit'=>4语句:SELECT*FROM`think_user`ORDERBYdateDESCLIMIT2直接覆盖命名范围
scope(array('where'=>1,'order'=>'dateDESC','limit'=>2))->select());}直接覆盖命名范围语句:SELECT*FROM`think_user`ORDERBYdateDESCLIMIT2直接用命名范围名调用
sql2()->select());}}SELECT*FROM`think_user`ORDERBYdateDESCLIMIT2
create());//create只提交跟user对应的字段}}create返回了一个数组数组包含user和email,生日没有提交出去,因为生日不存在User表里的:array(size=2)'user'=>string'蜡笔小新'(length=12)'email'=>string'xiaoxin@qq.com'(length=14)
field('user')->create());}}只显示userarray(size=1)'user'=>string'蜡笔小新'(length=12)(2)在模型类里限制字段email路径:ThinkPHP/Weibo/Home/Common/Model/UserModle.class.php代码
field('user')->create());}}只显示user:array(size=1)'user'=>string'蜡笔小新'(length=12)2.validate,用于数据自动验证;3.auto,用于数据自动完成;4.token,用于令牌验证二.数据写入(add)数据写入使用的是add()方法。方式一:普通方式新增一条数据
create();$data['date']=date('Y-m-dH:i:s');$user->data($data)->add();}}通过提交页面提交后sql语句:INSERTINTO`think_user`(`user`,`email`,`date`)VALUES('西西456','xixi@qq.com','2018-04-1413:50:44')(2)data连贯方法支持字符串、数组、对象
find());//可以传递数字参数,AR模式}}sql语句:SELECT*FROM`think_user`LIMIT1显示默认所有数据
select());//可以传递数组形式的SQL}}sql语句:SELECT*FROM`think_user`获取第一条user字段的值
getField('user'));}}sql语句:SELECT`user`FROM`think_user`LIMIT1获取所有user字段的值
getField('user',true));}}sql语句:SELECT`user`FROM`think_user`传递多个字段,获取所有(重复的被屏蔽)
getField('user,email'));}}sql语句:SELECT`user`,`email`FROM`think_user`用id冒号分隔
getField('id,user,email',':'));}}sql语句:SELECT`id`,`user`,`email`FROM`think_user`限制2条数据
getField('id,user,email',2));}}sql语句:SELECT`id`,`user`,`email`FROM`think_user`LIMIT2四.数据更新(save)数据更新使用的方法是save()方法,主要是对数据的修改操作。
where($map)->save($data);//成功后返回1,否则0}}sql语句:UPDATE`think_user`SET`user`='蜡笔大新',`email`='daxin@qq.com'WHERE(`id`=1)判断主键是条件(可读性差)
create();//POST必须包含主键$user->save();}}结合create提交后sql语句:UPDATE`think_user`SET`user`='蜡笔大新',`email`='113194773@qq.com'WHERE(`id`=1)修改某一个值
where($map)->setField('user','蜡笔小新');}}sql语句:UPDATE`think_user`SET`user`='蜡笔小新'WHERE(`id`=1)统计累计,累加count字段加1
where($map)->setInc('count',1);//累加}}sql语句:UPDATE`think_user`SET`count`=count+1WHERE(`id`=1)统计累计,累减count字段减1
where($map)->setDec('count',1);//setDec累减}}sql语句:UPDATE`think_user`SET`count`=count-1WHERE(`id`=1)五.数据删除(delete)数据删除使用的方法是delete()方法。直接删除主键(id=4)
delete(4);}}sql语句:DELETEFROM`think_user`WHERE(`id`=4)根据ID来删除
where($map)->delete();}}sql语句:DELETEFROM`think_user`WHERE(`id`=5)批量删除多个
where('1')->delete();}}delete()方法支持的连贯操作有:1.where,查询或更新条件;2.table,要操作的数据表名称;3.alias,数据表别名;4.order,结果排序;5.lock,锁;6.relation,关联查询;7.scope,命名范围;8.bind,数据绑定操作;9.comment,SQL注释。六.ActiveReocrd模式(ar)这种模式最大的特别就是简化了CURD的操作,并且采用对象化的操作方式,便于使用和理解。ActiveReocrd模式添加一条数据
user='火影忍者';$user->email='huoyin@qq.com';$user->date=date('Y-m-dH:i:s');$user->add();}}sql语句:INSERTINTO`think_user`(`user`,`email`,`date`)VALUES('火影忍者','huoyin@qq.com','2018-04-1412:35:33')找到主键为2的值
find(2));}}sql语句:SELECT*FROM`think_user`WHERE(`id`=2)LIMIT1查找user=西西的记录并输出
getByUser('西西'));//输出userecho$user->user;}}sql语句:SELECT*FROM`think_user`WHERE(`user`='西西')LIMIT1通过主键查询1,2,3数据
select('1,2,3'));}}sql语句:SELECT*FROM`think_user`WHERE(`id`IN('1','2','3'))查找id=3的把user改成蜡笔老新(效率不高)
find(3);//找到第一条$user->user='蜡笔老新';//改成$user->save();}}sql语句:SELECT*FROM`think_user`WHERE(`id`=3)LIMIT1UPDATE`think_user`SET`user`='蜡笔老新',`email`='xixi.163@.com',`count`=null,`date`='2018-04-1411:44:44'WHERE(`id`=3)查找id=3的删除掉(效率不高)
create());}}ThinkPHP--模型操作部分----数据库操作---自动验证ThinkPHP模型层提供的一种数据验证方法,可以在使用create创建数据对象的时候进行自动验证。一.验证规则数据验证可以对表单中的字段进行非法的验证操作。一般提供了两种验证方式:静态定义($_validate属性处理字段的)和动态验证(validate()方法灵活性比较高)。ThinkPHP/Weibo/Home/Model/UserModle.class.php添加需要验证限制字段
create($date)){echo'所有字段验证成功';}else{var_dump($user->getError());//自带getError方法}}}当user有值的情况下显示:所有字段验证成功当user没有值的情况下显示::string'用户不得为空!'二.静态定义在模型类里预先定义好该模型的自动验证规则,就是静态定义。ThinkPHP提供了九种自动验证内置方案ThinkPHP/Weibo/Home/Model/UserModle.class.php添加需要验证限制字段
create($data)){echo'所有数据验证成功!';}else{//输出错误信息var_dump($user->getError());}}}自定义规则用户名字必须在3-5位回调方法ThinkPHP/Weibo/Home/Model/UserModle.class.php添加需要验证限制字段
$max){//如果$len小于$min或者大于$maxreturnfalse;//返回false}else{returntrue;}}ThinkPHP/Weibo/Home/Controller/UserController.class.php判断验证
create($data)){echo'所有数据验证成功!';}else{//输出错误信息var_dump($user->getError());}}}函数验证附加规则function,ThinkPHP/Weibo/Home/Model/UserModle.class.php添加需要验证限制字段
$max){//如果$len小于$min或者大于$maxreturnfalse;//返回false}else{returntrue;}}ThinkPHP/Weibo/Home/Controller/UserController.class.php判断验证
create($data)){echo'所有数据验证成功!';}else{//返回JSON格式$this->ajaxReturn($user->getError());}}}三.动态验证动态验证就是把验证的规则放在控制器端,这样,在操作的时候比较灵活,缺点就是比较混乱。ThinkPHP/Weibo/Home/Controller/UserController.class.php全部写在控制器里
validate($rule)->create($data)){//动态validate方法定义传$rule数组变量echo'验证所有字段成功!';}else{var_dump($user->geterror());}}}当用户名user有值显示验证所有字段成功!当用户名user没有值显示用户名不得为空
ThinkPHP--模型操作部分----数据库操作--自动完成ThinkPHP模型层提供的数据处理方法,主要用于数据的自动处理和过滤,使用create()方法创建数据是会自动完成。一.完成规则自动完成一般通过默认字段写入、安全字段过滤以及业务逻辑的自动处理等。有两种方式实现自动完成的规则:1.静态方式:在模型类里通过$_auto属性定义处理规则;2动态方式:使用模型类的auto方法动态创建自动处理规则。1.完成字段:必填,需要的字段名;2.完成规则:必填,配合附加规则完成;3.完成条件:可选,具体如下:(1)self::MODEL_INSERT或1,新增数据的时候处理(默认);(2)self::MODEL_UPDATE或2,更新数据的时候处理;(3)self::MODEL_BOTH或3,所有情况均处理。4.配合完成规则使用,包括一下规则:function规则:函数完成,定义的验证规则是一个函数名callback规则:方法完成,定义的验证规则是当前模型类的一个方法field规则:用其他字段填充,表示填充的内容是一个其他字段的值string规则:字符串(默认)ignore规则:为空则忽略(3.1.2新增)为了测试方便,我们可以直接通过模拟提交POST:ThinkPHP/Weibo/Home/Controller/UserController.class.php提交成功新增一条数据
create($data)){//如果判断成功了$user->add();//对他进行新增操作}}}二.静态定义在模型类里预先定义好该模型的自动完成规则,就是静态定义。ThinkPHP/Weibo/Home/Model/UserModle.class.php模型在新增数据的同时给count字段设置为1
create($data)){//如果判断成功了$user->save();//对他进行修改操作}}}ThinkPHP/Weibo/Home/Model/UserModle.class.php模型在新增数据的同时留空的user忽略不修改
auto($rules)->create($data)){$user->add();}}}ThinkPHP--视图(view)ThinkPHP视图,视图是Web的可见内容,一般是HTML结合PHP获取的数据提供给用户使用的部分,属于MVC中的V。一.模版定义模版在使用之前需要一定的设置,才能方便开发者使用。每个模块的模版文件是独立的,为了对模版文件更加有效的管理,ThinkPHP对模版文件机型目录划分,默认的模版文件定义规则是:视图目录View/[模版主题/]控制器名User/操作名index+模版后缀.html第一步:在User控制器UserController.class.php模块执行一条语句:
display();}}注意:什么都没有定义的情况下,会自动报错,错误信息提示如下模板不存在:./Weibo/Home/View/User/index.html创建:/Weibo/Home/View/User/index.html
Title这是模版文件