一、模板引擎
模板引擎(Web开发的模板引擎)是为了用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的HTML文档,其本质就是根据一定的规则进行变量替换。模板引擎可以解耦前后端,提高开发效率。
Twig是一款灵活、快速、安全的PHP模板引擎,类似于其他的模板引擎, 如Smarty、Django、Jinja等。每种模板引擎的实现本质是相同的——就是变量替换。
二、Twig安装及使用
目前而言,安装应该都是composer工具安装。
composer require "twig/twig:~2.0"
require_once '/path/to/vendor/autoload.php';
$loader = new \Twig\Loader\ArrayLoader([
'index' => 'Hello {{ name }}!',
]);
$twig = new \Twig\Environment($loader);
echo $twig->render('index', ['name' => 'Fabien']);
三、基本语法
# 输出变量
{{ foo }}
# 判断
{% if foo %}
{{ foo }}
{% endif %}
# for (foo array)
{% for x in foo %}
{{ x }}
{% endfor %}
# 格式化(foo array)
{{ foo | json_encode }}
# 运算
{{ foo ? true : false }}
{{ foo + 2 }}
# html 扩展
{% extends "base.html" %}
{% block title %}Index{% endblock %}
{% block head %}
{{ parent() }}
<style type="text/css">
.important { color: #336699; }
</style>
{% endblock %}
{% block content %}
<h1>Index</h1>
<p class="important">
Welcome to my awesome homepage.
</p>
{% endblock %}
更多用法请参考官方文档。
四、使用场景
1 目前流行的MVC模式框架的渲染模板
2 发送邮件的内容渲染模板
针对第二种使用场景,这里给出业务实际应用场景,现在有线上预警实时,在发送异常时要发送报告邮件,且邮件格式要使用表格,并具备一定的美观性,这时就可以在发送邮件时,使用twig处理一下,然后再把处理后的内容发送邮件即可,伪代码如下:
# 1 首先引入twig自动加载类,如果是composer安装则不需要
require_once(BASE_DIR . '/deploy/framework/Twig/Autoloader.php');
# 2 获取twig类,使用其render方法
<?php
class Util {
/**
* @return \Twig_Environment
*/
public static function Twig()
{
$autoloader = new \Twig_Autoloader();
$autoloader->register(true);
$twig = new \Twig_Environment(new \Twig_Loader_Filesystem(array(
'__main__' => app()->basePath() . '/views'
)));
return $twig;
}
}
# 3 代码中使用
$twig = Util::Twig();
$context = $twig->render('warning.html', array('foo' => $foo));
# 4 warning.html代码
<!DOCTYPE html>
<html lang="zh-cn"
style="margin: 0;padding:0;width:100%;">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible"
content="ie=edge">
<title>实时监控预警邮件</title>
</head>
<body>
{{ foo }}
</body>
</html>
欢迎一起交流学习!
参考文档
1 twig官方文档,https://twig.symfony.com/doc/2.x/
2 smarty 模板引擎 https://www.smarty.net/files/docs/manual-en-2.6.pdf