Twig(非symfony)全局变量

时间:2016-03-24 00:23:04

标签: php twig

我已经有一段时间了,因为我一直在做一些事情。我使用了一个非常古老的模板解析器,我认为是时候转向Twig了。

它看起来非常好,并且很乐意使用它,但我遇到了一些我似乎无法找到解决方案的问题。我看到了一些关于我的问题,但没有工作,大部分时间他们都在使用symfony。

所以让我解释一下;

我使用index.php作为主页面(frontcontroller)并将我的文件包含在其中。因为我使用显示登录信息的正确菜单等...将显示在base.html中,因此显示在每个模板中...我需要找到一种方法来设置我的index.php文件中的全局变量数组

我知道有一个$ twig-> addGlobal(' test','这是我的测试);但需要添加更多。

有getGlobals()的Extention,但你需要在那里提供的数组中手动​​添加它们,我找不到从索引传递数组的方法。此外,如果我调查它,它说它已被弃用。

也许我看过它或者Twig对我来说不是解决方案? 欢迎任何帮助,并提前感谢!

尼科。

2 个答案:

答案 0 :(得分:1)

您可以使用Twig扩展程序:

class MyTwigExtension extends Twig_Extension implements Twig_Extension_GlobalsInterface
{
    private $some;

    private $data;

    public function __construct($some, $data) {
        $this->some = $some;
        $this->data = $data;
    }

    public function getGlobals()
    {
        $globals = array();

        // .. create globals by using the properties defined above

        return $globals;
    }

    // ...
}

getGlobals方法确实已被弃用,但在代码中他们说:

  

从1.23开始@deprecated(将在2.0中删除),改为实现Twig_Extension_GlobalsInterface

因此,如果实现Twig_Extension_GlobalsInterface,则不推荐使用getGlobals方法。

创建Twig_Environment时,添加如下扩展名:

$twig = new Twig_Environment($loader);
$twig->addExtension(new MyTwigExtension($passYour, $data));

所以基本上你将创建全局变量所需的所有数据传递给扩展的构造函数。

答案 1 :(得分:-1)

如何将$GLOBALS传递给Twig_Enviroment?

$ TwigLoader = new Twig_Loader_Filesystem([...]);

$ Twig = new Twig_Environment($ TwigLoader,     阵列(         '全局' => $ GLOBALS     ) );

然后在Twig模板中:

{{globals.your_variable_name}}