gpt4 book ai didi

php - Twig_SimpleFunction 可以修改上下文吗?

转载 作者:可可西里 更新时间:2023-11-01 13:53:24 24 4
gpt4 key购买 nike

是否可以通过调用 Twig_SimpleFunction 来修改当前的 Twig 上下文?

我注册了以下功能:

<?php
namespace Craft;

class TwiggedTwigExtension extends \Twig_Extension
{
public function getName()
{
return 'Twigged';
}

public function getFunctions()
{
return array(
'setContextVar' => new \Twig_SimpleFunction('setContextVar', array($this, 'setContextVar'), array('needs_context' => true)),
);
}

public function setContextVar($context, $str, $val)
{
$context['context'][$str] = $val;

var_dump(array_keys($context['context']));
}
}

当从类似 {{ setContextVar('hellow', 'world') }} 的模板调用时,var_dump 显示修改后的上下文。但是像这样快速检查模板 {{ dump(_context|keys) }} 不会显示修改后的上下文。

我是不是用错了方法?

最佳答案

这对于函数来说是不可能的,因为上下文不是通过引用传递的。

在您的扩展中,您甚至可以访问 $context['context'],这意味着一个名为 context 的变量,而不是上下文本身(_context 是一个特殊的变量名,用于访问模板中的上下文,但它不会出现在发送给函数的上下文数组中,因为它本身就是数组)。

可能有一种方法可以通过更改节点类来自定义函数编译来执行此操作。但我还没有尝试过,它最终可能会有点难以维护表达式语义。
无论如何,我建议不要编写这样的函数。在 Twig 中分配变量没有函数语义,不能作为表达式的一部分完成(函数当然可以在表达式中使用)。更改此语义可能会导致奇怪的行为。

关于php - Twig_SimpleFunction 可以修改上下文吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32525041/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com