本文共 3453 字,大约阅读时间需要 11 分钟。
系统学习tp5框架,请点击下面的连接
视图命名:在各自模块下建立view目录,view目录下建控制器目录(控制器名如果是驼峰法转换为全小写加_)
1、路由
use think\Route;//该文件是路由的配置文件,解决复杂场景用的Route::get('index','index/IndexController/index'); //手册-》视图-》模板渲染Route::get('send','index/IndexController/send'); //手册-》视图-》模板赋值Route::get('cont','index/IndexController/cont'); //手册-》模板-》超全局变量(变量输出)和系统常量Route::get('fun','index/IndexController/fun'); //手册-》模板-》使用函数(模板中输出函数处理)Route::get('loop','index/IndexController/loop'); //手册-》模板-》内置标签(遍历模板中的数据)Route::get('replace','index/IndexController/replace');Route::get('original','index/IndexController/original'); //手册-》模板-》原样输出(防止模板标签被解析)Route::get('layout','index/IndexController/layout'); //手册-》模板-》模板布局
2、模板渲染
3、模板赋值
//模板赋值的本质是:给前端页面发送数据public function send(){ $resObj = User::get(1); $this->assign('mysqlUser',$resObj); //对象 $arrData = [ 'a' => '张三', 'b' => '李四', 'c' => '王五' ]; $this->assign('user',$arrData); //数组赋值 $name = 'yx'; $age = 26; return $this->fetch('send',[ //数组直接输出 'na' => $name, 'ag' => $age ]);}
4、超全局变量和系统常量的输出
//超全局变量和系统常量的输出public function cont(){ //常用可以直接在模板中输出,只需要加入$Think Session::set('user_name','杨西瓜'); echo Session::get('user_name'); return $this->fetch();}
5、模板中使用php函数
//模板中使用函数处理public function fun(){ /* 总结: * 1、函数中只传变量。 * 2、函数中要传参数和变量,变量用###占位 * */ return $this->fetch('fun',[ 'na' => 'yangxigua', 'hna' => '海阔天空
', 'ti' => time(), 'str' => 'hello', 'attack' => "" ]);}
这是index_controller控制器的fun模板
【只传一个变量】用管道符,后面跟函数名。 多个函数,是先用函数处理前面的,在用后面的函数处理它前面的
{$na|strtoupper|md5}【安全攻击】
{$attack|htmlspecialchars}{$hna|strip_tags}【带参数的函数,参数在前,变量在后】 用等号,参数中间加逗号,###相当于是占位符。 因为管道符会把前面的结果传给后面
{$ti|date="Y-m-d H:i:s",###}【带参数的函数,变量在前,参数在后】 用等号,参数中间加逗号,###相当于是占位符。 因为管道符会把前面的结果传给后面
{$str|substr=###,0,3}【默认值】
{$test|default='您看见的是默认值'}【原生写法】花括号中加冒号
{:strtoupper($na)}
6、遍历模板中的数据
//遍历模板中的数据public function loop(){ $res = User::all([1,2])->toArray(); return $this->fetch('loop',[ 'twoWei' => $res ]);}
这是index_controller控制器的loop模板
volist用法
{volist name="twoWei" id="val" } {$i}=>{$key}=>{$val.name} {/volist}foreach用法
{foreach $twoWei as $k=>$v} foreach打印:{$v['id']}=>{$v['name']} {if($v['id'] == 1)} if判断:{$v['name']} {elseif($v['id'] == 2) /} else if判断:{$v['name']} {else /} 你进的是else {/if} {switch name="$v['name']"} {case value='我'} switch判断:{$v['password']} {/case} {default /} switch的default {/switch} {$v['name'] == '我' ? '三元运算符:输出密码' : '三元运算符:输出no'}{/foreach}for用法
{for start="1" end="6" name='i' step="2"} {$i}{/for}原生用法
{php} echo "只是给包裹php的<>换成了{},问号换成了/其余一样。"; echo '这里面写php代码就可以了';{/php}
7、字符串替换
在app/config.php中改,多个替换用逗号分隔
// 视图输出字符串内容替换'view_replace_str' => ['__IMG__'=>'/static/img/','_ICON_'=>'/static/icon/'],
控制器代码:
//字符串替换public function replace(){ //看着像常量,其实不是。需要先在config.php中定义 return $this->fetch();}
模板代码和输出效果:
8、原样输出
//原样输出public function original(){ return $this->fetch();}
9、修改模板文件存放目录的位置
先在app/config.php下添加配置
开启之后(模板此时的路径还在app/模块/view中)会报该错误
将其放到public下,就不报错了
10、模板布局之全局生效
修改配置文件
控制器代码随便调用个模板就行(这里就补贴图了)
注意:
1、如果哪个模板不需要引入头脚步,就在该模板中加入{__NOLAYOUT__}
2、如果不开启全局配置,只有单个模板想使用,可以使用{layout name="master/layout" /}
11、模板继承
继承和布局的区别:继承更灵活
注意:要给模板布局那得配置文件注释掉,才能用
定义:
使用(控制器代码也是随便调个模板):