首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何从Twig模板中检索所有变量?

如何从Twig模板中检索所有变量?
EN

Stack Overflow用户
提问于 2012-10-09 19:30:51
回答 10查看 55.6K关注 0票数 49

有没有可能用PHP检索Twig模板中的所有变量?

示例someTemplate.twig.php:

代码语言:javascript
复制
Hello {{ name }}, 
your new email is {{ email }}

现在我想做这样的事情:

代码语言:javascript
复制
$template = $twig->loadTemplate('someTemplate');
$variables = $template->getVariables();

$variables现在应该包含"name“和"email”。

我想这样做的原因是,我在一个CMS系统上工作,其中我的小枝模板和变量是由我的用户动态设置的,他们也通过API填充变量。

我希望将默认值设置为未设置的变量,因此我需要模板…中存在的所有变量的列表

EN

回答 10

Stack Overflow用户

发布于 2015-10-22 16:39:39

我发现这对获取当前上下文中所有可用的顶级键很有用:

代码语言:javascript
复制
<ol>
    {% for key, value in _context  %}
      <li>{{ key }}</li>
    {% endfor %}
</ol>

感谢https://www.drupal.org/node/1906780

票数 73
EN

Stack Overflow用户

发布于 2017-05-25 21:59:59

我这样做的方式是

代码语言:javascript
复制
<script>console.log({{ _context | json_encode | raw }});</script>

然后我就用DevTools检查我的控制台

票数 16
EN

Stack Overflow用户

发布于 2016-10-18 17:54:36

我认为19Gerhard85的答案非常好,尽管它可能需要一些调整,因为它为我匹配了一些空字符串。我喜欢在可能的情况下使用现有函数,这是一种主要使用twig函数的方法。您需要访问应用程序的twig环境。

代码语言:javascript
复制
/**
 * @param $twigTemplateName
 * @return array
 */
public function getRequiredKeys($twigTemplateName)
{
    $twig = $this->twig;
    $source = $twig->getLoader()->getSource($twigTemplateName);
    $tokens = $twig->tokenize($source);
    $parsed = $twig->getParser()->parse($tokens);
    $collected = [];
    $this->collectNodes($parsed, $collected);

    return array_keys($collected);
}

它唯一的定制部分是递归函数,它只收集特定类型的节点:

代码语言:javascript
复制
/**
 * @param \Twig_Node[] $nodes
 * @param array $collected
 */
private function collectNodes($nodes, array &$collected)
{
    foreach ($nodes as $node) {
        $childNodes = $node->getIterator()->getArrayCopy();
        if (!empty($childNodes)) {
            $this->collectNodes($childNodes, $collected); // recursion
        } elseif ($node instanceof \Twig_Node_Expression_Name) {
            $name = $node->getAttribute('name');
            $collected[$name] = $node; // ensure unique values
        }
    }
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12799094

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档