树枝 - 从模板中获取所有块

时间:2014-01-18 06:55:09

标签: php twig

这是我的base.template.html

{% block header %}{% endblock %}
{% block body %}{% endblock %}
{% block footer %}{% endblock %}

已更新

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

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

我知道使用regex可以解决这个问题,但Twig有别名功能

block('header')

2 个答案:

答案 0 :(得分: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']

答案 1 :(得分: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];
}

如果您找到更好的方法,请告诉我。否则,上述功能是一种快速轻便的替代方案。