视图命名:在各自模块下建立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、模板继承 继承和布局的区别:继承更灵活 注意:要给模板布局那得配置文件注释掉,才能用 定义: 使用(控制器代码也是随便调个模板): |
|