因为最近自建了一个框架,想慢慢的完善,以便自己学习使用。框架中引入了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);
网友评论