• 构建自己的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官网地址

  • 相关阅读:
    mac安装完anaconda后,环境变量设置
    axios如何发送Basic Auth
    Django自带认证系统邮件模板自定义
    Ajax与Flask传值的跨域问题
    一道XXE漏洞和SSRF结合的题目
    如何分多次Pull requests
    如何使用C#写个多简单文档编辑器
    如何用Tkinter写个计算器
    LCTF2017学到的姿势
    Python 学习之路
  • 原文地址:https://www.cnblogs.com/evai/p/6244043.html
Copyright © 2020-2023  润新知