模板引擎
模板数据
在控制器中增加返回数据, 使用 $this->display()
方法渲染模板
function index()
{
$this->data['name'] = 'ideaa';
$this->data['city'] = 'chengdu';
$this->display($this->data);
}
模板中通过 $data
变量来使用数据
<?= $data['name'] ?? '' ?>
<?= $data['city'] ?? '' ?>
嵌套模板
在a模板中使用 $this->renderTpl()
方法嵌套b模板
$this->renderTpl('hello/b', $data ?? [])
不管嵌套多少层,在模板中总是用
$data
变量来获取模板数据 😄
模板组合
可以使用 renderTpl()
将多个模板组合在一起
$this->renderTpl('hello/a', $data ?? [])
$this->renderTpl('hello/b', $data ?? [])
$this->renderTpl('hello/c', $data ?? [])
扩展模板方法
除了 内置模板方法 外,你可以轻易扩展自己的模板方法。
function h1Name($name)
{
return '<h1>'.$name.'</h1>';
}
在视图控制器中定义的方法,可以中模板中直接使用
<?= $this->h1Name($data['city'] ?? '') ?>
PHP处理HTML
扩展模板时,不可避免要混编代码,可以使用PHP来输出HTML, 改写后的 h1Name
方法
function h1Name($name)
{
return self::htmlTag('h1', ['@content' => $name]);
//return '<h1>'.$name.'</h1>';
}
@content
是一个特殊的key, 表示HTML内容, 视图控制器内置方法 htmlTag
可以生成任意 html
标签
添加属性
为标签添加任意属性
function h1Name($name)
{
return self::htmlTag('h1', [
'@content' => $name,
'style' => 'font-size: 130px',
'id' => $name,
'attr-val' => $name
]);
}
生成的HTML为:
<h1 style="font-size: 130px" id="chengdu" attr-val="chengdu">chengdu</h1>
复杂HTML
使用支持链式调用的 wrap()
方法,生成复杂的HTML
function h1Name($name)
{
$h1 = self::htmlTag('h1', [
'@content' => $name,
'style' => 'font-size: 130px',
'id' => $name,
'attr-val' => $name
]);
return $this->wrap('div', ['class' => 'row'])
->wrap('div', ['class' => 'col-md-12'])
->html($h1);
}
生成的HTML为
<div class="row">
<div class="col-md-12">
<h1 style="font-size: 130px" id="chengdu" attr-val="chengdu">chengdu</h1>
</div>
</div>
可编程HTML,让UI处理更灵活