twig如何在自建框架中使用全局变量

2019-03-19  本文已影响0人  Mr_Arvin

因为最近自建了一个框架,想慢慢的完善,以便自己学习使用。框架中引入了twig模版引擎,今天在使用的时候,发现PHP中的全局变量没法直接用,每次都通过传参数的方式显得太繁琐了。看了symfony的文档,并没有找到自建框架中使用的答案。

方案一:可以使用templating组件,自带了一个模版引擎,而且官方文档也有相应的介绍。(此处我采用方案二,故这方案不多讨论)

方案二:
在我去看twig源码的时候,发现其实twig本身就有配置全局变量的方法addGlobal,要配置直接调用此方法就好了,我这里为了方便使用,采用注入容器的思想,使之在框架启动之时就编译所有配置的全局变量,方便后面直接使用。这里贴出用到的主要代码:

class App
{
    protected static $container = [];
    /**
     * 注入
     *
     * @param [type] $key
     * @param [type] $val
     * @return void
     */
    public static function set($key, $val)
    {
        self::$container[$key] = $val;
    }
    /**
     * 获取
     *
     * @param [type] $key
     * @return void
     */
    public static function get($key)
    {
        if (!array_key_exists($key, self::$container)) {
            throw new Exception("not find".$key);
        }
        return self::$container[$key];
    }
}
    /**
     * 1、注入模版引擎对象
     * 2、写入全局变量到模版
     * @return void
     */
    static private function appView()
    {
        $loader = new \Twig_Loader_Filesystem(APP.'/views');
        $twig = new \Twig_Environment($loader, array(
            'cache' => ROOT.'/storage/cache',
            'debug' => DEBUG,
        ));
        App::set('twig',$twig);
        require "config/twigGlobal.php";
    }
<?php
/**twigGlobal.php
 * 配置模版全局变量
 */
App::get('twig')->addGlobal('ROOT', ROOT);
App::get('twig')->addGlobal('PUBLIC', /Public);
上一篇下一篇

猜你喜欢

热点阅读