【问题标题】:Twig (non-symfony) global variablesTwig(非 symfony)全局变量
【发布时间】:2016-03-24 00:23:04
【问题描述】:

我已经有一段时间没有做某事了。我使用了一个非常旧的模板解析器,我认为是时候继续使用 Twig 了。

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

让我解释一下;

我使用我的 index.php 作为主页(前端控制器)并将我的文件包含在其中。由于我使用显示登录信息等的右侧菜单...将显示在 base.html 中,因此显示在每个模板中...我需要找到一种方法来在我的 index.php 文件中设置全局数组.

我知道有一个 $twig->addGlobal('test', 'This is my test);但需要添加很多。

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

也许我看了一下,或者 Twig 不是我的解决方案? 欢迎任何帮助,提前致谢!

尼科。

【问题讨论】:

    标签: php twig


    【解决方案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 方法,但在代码中他们说:

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

    因此,如果您实现 Twig_Extension_GlobalsInterface,则不建议使用 getGlobals 方法。

    当你创建 Twig_Environment 时,像这样添加扩展:

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

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

    【讨论】:

    • 我在上面发布的 MyTwigExtension 类只包含回答问题的必要部分。当然,您必须实现所需的所有方法。您收到的错误消息到底是什么?
    • 我必须传入 getName 函数,否则它给了我一个错误。我如何将我的数组传递给它?例如: $global_array = [ 'var1' => 'output1', 'var2' => 'output2', //.... ... ];
    • 使用构造函数参数。我在回答中描述了它。
    • 傻我!有用。我花了令人沮丧的一周来找到正确的答案!非常感谢!
    【解决方案2】:

    $GLOBALS 传递给Twig_Enviroment 怎么样?

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

    $Twig = new Twig_Environment($TwigLoader, 大批( 'globals' => $GLOBALS ) );

    然后在 Twig 模板中:

    {{ globals.your_variable_name }}

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-10
      • 2017-08-15
      • 1970-01-01
      相关资源
      最近更新 更多