golang 使用twig模板引擎,站在php的肩膀上!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang 使用twig模板引擎,站在php的肩膀上!相关的知识,希望对你有一定的参考价值。

参考技术A 和有些小伙伴一样,本人是从php转到了go,从事php时使用symfony框架一直享受其丰富的功能带来的便利,转到其他语言时比较直观的感觉就是twig真强,为什么其他语言没有扩展twig呢?

虽然前后端的开发模式,让模板引擎这个东西慢慢淡去,但是有时候还是需要用到这种东西,所以就有了,go调用php实现twig模板引擎的想法。

原理,go 通过exec.Command调用php,通过STDIN,STDOUT 方式进行数据交互
go在初始化阶段提供一些配置参数,比如模板引擎的为止,是否为开发环境等,php接收数据并初始化
初始换环境完毕后,当需要渲染模板,go再讲模板文件和数据以json字符串的形式写入STDIN告知php,
php接收到数据后,解析数据,选取指定的模板并渲染,然后通过STDOUT返回给go
这样一次渲染就结束了

整理好的文件打包在github上了

如果喜欢就动动你的小手指点个赞,star一下吧!

构建自己的PHP框架(Twig模板引擎)

完整项目地址:https://github.com/Evai/Aier

Twig 模板引擎

模版引擎 twig 的模板就是普通的文本文件,也不需要特别的扩展名,.html .htm .twig 都可以。模板内的 变量 和 表达式 会在运行的时候被解析替换,标签(tags)会来控制模板的逻辑。
 

安装Twig

命令行运行:

composer require "twig/twig:~1.0"

 

在services目录下创建Twig.php:

 

<?php

/**
 * Class Twig
 */
class Twig
{
    public $view;

    public $data;

    public $twig;

    public $path = BASE_PATH . \'/app/Views/\';

    /**
     * Twig constructor.
     * @param $view
     * @param $data
     */
    public function __construct($view, $data)
    {
        $loader = new Twig_Loader_Filesystem($this->path);

        $this->twig = new Twig_Environment($loader, array(
            \'cache\' => BASE_PATH . \'/cache/views/\',
            \'debug\' => true
        ));

        $this->view = $view;
        $this->data = $data;

    }

    /**
     * @param $view
     * @param array $data
     * @return Twig
     */
    public static function render($view, $data = array())
    {

        return new Twig($view, $data);

    }

    public function __destruct()
    {
        $this->twig->display($this->view, $this->data);
    }
}

 

执行命令:

 

composer dump-autoload

 

在app/Views/ 下分别创建一个app.twig文件和index.twig 文件(.html文件也是可以的):

 

{#app.twig#}

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>app</title>
</head>

<body>

<header>header</header>

{% block content %}

{% endblock %}

<footer>footer</footer>

</body>
</html>
{#index.twig#}
{% extends \'app.twig\' %}
{% block content %}

hello {{ data.name }}, your mobile is {{ data.mobile }}

{% endblock %}

 

在控制器中添加:

 

$data = [\'data\' => [\'name\' => \'evai\', \'mobile\' => 12345678910]];

return Twig::render(\'index.twig\', $data);

 

刷新浏览器,可以看到显示如下页面:

 

 

 详细文档请参考twig官网地址

以上是关于golang 使用twig模板引擎,站在php的肩膀上!的主要内容,如果未能解决你的问题,请参考以下文章

yii2 使用twig 模板引擎

Twig 和 Vue.js 的模板冲突

Twig---的使用

Twig 模板引擎不读取对象属性

如何使用 Laravel8 中的 Twig 扩展注入 php GraphQL 查询结果,在 Twig(Bridge) 模板中定义查询?

如何将php变量传递给twig模板