摘要:一.模板渲染 1.渲染变量 可以将变量直接return 然后在模板文件中使用{变量}调用$name = '黑寡妇'; return $name; /***************/ {$name} 2.display()渲染内容,也可以使
一.模板渲染
1.渲染变量 可以将变量直接return 然后在模板文件中使用{变量}调用
$name = '黑寡妇';
return $name;
/***************/
{$name} 2.display()渲染内容,也可以使用视图类View()来渲染,使用静态代理的门面技术来使用 use think\Facade\View 然后使用display渲染
use think\Facade\View
/******************/
$name = '黑寡妇';
return View::display('我的姓名是:<span style="color:rosybrown">'.$name.'</span>'); 3.使用View类的fetch()方法来渲染模板,亦可以控制器类的view属性来调用View类的fetch()方法,这样就不用use think\Facade\View了 ,只需继承Controller父类
* fetch('模板表达式',['模板变量名'=>'值'])指定一个模板进行内容输出
* 模板表达式: 模块@控制器/操作方法
* 模板以模块/view目录为根目录
* 如果使用默认规则来定位模板可以省略模板表达式
* 控制器类assign('模板变量名','模板变量值')方法为模板变量赋值
* 助手函数输出,不依赖任何类 不推荐使用 view()
class Index extends Controller
{
public function demo1()
{
//调用Controller类中的view属性的就是View的实例对象,
return $this->view->fetch('index@index/demo1',['name'=>$name]);
//Controller类的fetch()方法就是调用View类的fetch方法,所以可以越过view属性
return $this->fetch('index@index/demo1',['name'=>$name]);
//模板变量赋值
$this->assign('name',$name);
//即可省略参数 默认输出模板
return $this->fetch();
//助手函数
return view('demo1',['name'=>$name]);
}
}二.模板赋值与过滤
在上面的操作已经涉及模板赋值
1.assign(('模板变量名',值)
$name = '钢铁侠';
$this->view->assign('name',$name);
return $this->view->fetch()
//{$name} 2.传参赋值:fetch('模板',[参数数组])
return $this->view->fetch('index@index/demo1',['name'=>$name]);
//{$name} 3.对象赋值 $this->view ===View对象 所以直接
View视图类有一个魔术方法__get 和__set 会将$this->view->变量名直接设置为模板变量保存在 protected $data = []中
$this->view->salary = 5000; //{$salary} 50004.模板过滤 就是使用View对象的filter(回调)来实现过滤,回调方法来处理过滤的字符
$this->view->name = '老王'; //模板赋值
$this->view->salary = 8000; //模板赋值
$filter = function($content){ //回调
return str_replace('老王','钢铁侠',$content);
};
return $this->view->filter($filter)->fetch()
//也可以直接将回调传入filter中
return $this->view->filter(function($content){
return str_replace('老王','绿巨人',$content)
})->fetch();三.模板布局
1.config/template.php添加配置进行全局配置,所有的模板文件都会有模板布局文件的内容
//模板布局配置 'layout_on' => true, //开启模板布局 'layout_name' => 'layout' //指定模板布局文件
这样就开启了全局模板布局,在指定的模板布局目录中添加layout.html 即view目录下添加, 可以创建两个头部,尾部文件在public文件目录下,然后在模板文件中引用,实现复用,{__CONTENT__}就是对应模板文件自己的内容
{include file="public/header" /}
{__CONTENT__}
{include file="public/footer" /} 2.模板标签进行配置
* 标签控制 不依赖与全局配置,在模板中直接用标签控制
* {layout name = "布局模板"}
* 关闭布局:{__NOLAYOUT__}
在需要模板布局的模板文件中使用{layout name="layout" /} 即可引入布局文件
{//layout name="layout" 注释使用双// /}
{layout name="layout" /}
<!-- 模板文件内容 --> 3.动态配置 使用视图类的engine属性(引擎对象)的layout()方法开启模板布局
* 不需要再模板配置文件中进行任何配置
* 不需要再当前模板中添加任何标签
$this->view->engine->layout(true) //开启模板布局 return $this->view->fetch(); //渲染模板
* 关闭布局
$this->view->engine->layout(false); return $this->view->fetch();
* 链式调用方便注释 (*需要在fetch方法中传入模板参数,至少给到控制器级别*)
return $this->view //调用视图对象
->engine //模板对象
->layout(true) //开启模板布局
->fetch('index/demo4'); //至少给到控制器 模板渲染四.模板继承
1.创建模板继承文件 view/base.html基础模板,供其他子模板进行继承
2.基础模板中仅允许出现block标签(双标签) {block name="header"} 内容{/block}
3.在父模板中写在block以外的标签原样输出
4.子模板继承base模板 {extend name="base" /}
5.在子模板中 忽略block区块以外的内容全部忽略
6.子模板中区块顺序不重要
7.{__block__}引用基础模板中block内内容
{block name="header"}
{include file="public/header" /} {//写在block标签里 子模板可以重写}
{/block}
{block name="content"}
我是网站主体
{/block}
{block name="course"}<span style="color:darkgreen">课程名称:</span>{/block}
{block name="name"}<span style="color:darkgreen">隔壁老王</span>{/block}
{//在父模板中写在block以外的标签原样输出}
<a href="http://www.php.cn">PHP中文网</a>
{block name="footer"}
{include file="public/footer" /}
{/block}{extend name="content" /}
{//将父模版中的main区块进行重写}
{block name="content"}
<h1 style="text-align: center">我是字模板的网站主体部分</h1>
{/block}
{block name="name"}{/block}{//不重写的话就原样输出父级block块中内容}
{block name="course"}
{__block__}PHP中文网
{/block}
<a href="#">asdasdasd</a>
批改老师:天蓬老师批改时间:2018-12-19 10:54:21
老师总结:使用控制器提供的一些快捷方式, 很方便, 但可能得不到IDE的语法提示, 这点要注意, 还有就是助手函数, 除了在模板中, 其它的场景并不推荐使用,