Twig - 获取模板中的所有块

3
这是我的 base.template.html 文件。
{% block header %}{% endblock %}
{% block body %}{% endblock %}
{% block footer %}{% endblock %}

更新

我的问题是如何将base.template.html中的所有块放入数组中?

array => ['header', 'body', 'footer']

我知道使用正则表达式可以解决这个问题,但Twig有别名函数

block('header')

你的意思是“获取”?是在另一个模板中吗?还是通过PHP实现? - ivoba
我需要从基础模板中获取所有块。数组或变量 headerbodyfooter - user2426458
2个回答

3

非常简单!

$twig = new Twig_Environment;

/** @var $template Twig_Template */
$template = $twig->loadTemplate('base.template.html');

/** @var $blocks array */
$blocks = $template->getBlockNames();

var_dump($blocks);

将返回区块名称数组:
['header', 'body', 'footer']

0

我不知道Twig是否可以返回一个块数组。我在这里找到了一些东西:http://twig.sensiolabs.org/api/master/index.html 在解析器部分有一个getBlockStack()函数。但是不太确定如何访问它。

目前我正在使用正则表达式查找所有块名称:

private function _getBlocks($str) {
    // find all block starting tags
    preg_match_all("/\{%\s+block\s+([a-zA-Z\_0-9]+)\s+%\}/", $str, $matches);

    return $matches[1];
}

如果你发现更好的方法,请让我知道。否则,上面的函数是一种快速且轻量级的替代方案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接