系统学习tp5框架,请点击下面的连接
(1)学习tp5之助手函数得原理解析
(2)学习tp5之常量、自动加载、命名空间
(3)学习tp5之配置文件
(4)学习tp5之路由类型,定义,动态注册,过滤,闭包,miss(默认),资源路由
(5)学习tp5之请求
(6)学tp5之响应
(7)学习tp5之控制器原理和使用
(8)学习tp5之ORM操作数据库
(9)学习tp5之模型
(10)学习tp5之视图
(11)学习tp5之命令行的使用和验证表单令牌
(12)学习tp5之验证码和缓存
(13)学习tp5之上传图片
(14)学习tp5之日志
(15)学习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' => '<h1>海阔天空</h1>',
'ti' => time(),
'str' => 'hello',
'attack' => "<script>alert('123');</script>"
]);
}
<p>这是index_controller控制器的fun模板</p>
<hr />
<h4>【只传一个变量】用管道符,后面跟函数名。
<span style="color:blue">多个函数,是先用函数处理前面的,在用后面的函数处理它前面的</span>
</h4>
{$na|strtoupper|md5}
<h4>【安全攻击】</h4>
{$attack|htmlspecialchars}<br />
{$hna|strip_tags}
<hr />
<h4>【带参数的函数,参数在前,变量在后】
用等号,参数中间加逗号,###相当于是占位符。
<span style="color:blue">因为管道符会把前面的结果传给后面</span>
</h4>
{$ti|date="Y-m-d H:i:s",###}
<hr />
<h4>【带参数的函数,变量在前,参数在后】
用等号,参数中间加逗号,###相当于是占位符。
<span style="color:blue">因为管道符会把前面的结果传给后面</span>
</h4>
{$str|substr=###,0,3}
<hr />
<h4>【默认值】</h4>
{$test|default='您看见的是默认值'}
<hr />
<h4>【原生写法】花括号中加冒号</h4>
{:strtoupper($na)}
6、遍历模板中的数据
//遍历模板中的数据
public function loop(){
$res = User::all([1,2])->toArray();
return $this->fetch('loop',[
'twoWei' => $res
]);
}
<p>这是index_controller控制器的loop模板</p>
<hr />
<h4>volist用法</h4>
<!--name相当于是foreach中的中的数据as前面的,id相当于是foreach中的value-->
{volist name="twoWei" id="val" }
<!--没有指定key属性的话,默认使用循环变量i,来排序,就是123456789。其实key属性就是$i-->
{$i}=>{$key}=>{$val.name}<br/> <!--输出数组的索引,可以直接使用key变量-->
{/volist}
<hr />
<h4>foreach用法</h4>
<!--只是比php的多加个花括号-->
{foreach $twoWei as $k=>$v}
foreach打印:{$v['id']}=>{$v['name']}<br/>
<!--if判断-->
{if($v['id'] == 1)}
if判断:{$v['name']}<br/>
{elseif($v['id'] == 2) /}
else if判断:{$v['name']}<br/>
{else /}
你进的是else
{/if}
<!--switch判断-->
{switch name="$v['name']"}
{case value='我'}
switch判断:{$v['password']}<br/>
{/case}
{default /} switch的default<br/>
{/switch}
<!--手册-》模板-》三元运算符-->
{$v['name'] == '我' ? '三元运算符:输出密码' : '三元运算符:输出no'}<br/>
{/foreach}
<hr />
<h4>for用法</h4>
<!--这个name属性就是输出的$i。step每次加2-->
{for start="1" end="6" name='i' step="2"}
{$i}
{/for}
<hr />
<h4>原生用法</h4>
{php}
echo "只是给包裹php的<>换成了{},问号换成了/其余一样。<br/>";
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、模板继承
继承和布局的区别:继承更灵活
注意:要给模板布局那得配置文件注释掉,才能用
定义:
使用(控制器代码也是随便调个模板):