Php 修改细枝节点
我想在渲染所有模板后(或渲染期间)修改模板块,但我还需要知道每个模板和块的名称 考虑以下两个模板:Php 修改细枝节点,php,twig,Php,Twig,我想在渲染所有模板后(或渲染期间)修改模板块,但我还需要知道每个模板和块的名称 考虑以下两个模板: //master.twig {% block hello %} {% endblock %} //and page.twig {% extends 'master.twig' %} {% block hello %} {% endblock %} $twig->render('page.twig'); 在此之后(或在此期间),我想更改内容 伪代码: $template->blo
//master.twig
{% block hello %}
{% endblock %}
//and page.twig
{% extends 'master.twig' %}
{% block hello %}
{% endblock %}
$twig->render('page.twig');
在此之后(或在此期间),我想更改内容
伪代码:
$template->blocks['master.twig']['hello'] .= 'append something';
如何做到这一点
更新
看起来可以轻松地使用Twig\u NodeVisitor接口来修改节点
但是,为了获得当前模板的名称,我将Twig\u环境
子类化如下:
class TwigEnvironment extends \Twig_Environment
{
protected $currentTemplateName = null;
public function compileSource($source, $name = null)
{
$this->currentTemplateName = $name;
return parent::compileSource($source, $name);
}
public function getCurrentTemplateName()
{
return $this->currentTemplateName;
}
}
看来这会有用的 您可以搜索“NodeVisitor”以获得答案。对不起,我现在在路上,不能再帮你了。我还没看过,现在就可以了。谢谢,嗯。这看起来很有趣,但似乎没有向NodeVisitor提供任何关于实际模板的信息?是的,
NodeVisitor
用于在编译器上交互。。。编译器可以访问模板上下文,但不能访问节点本身。无论如何,Twig_Loader
负责从文件路径(或NoSQL键、数据库id等)获取Twig内容,因此,根据设计,您不能在其他地方获得大量关于它的信息。您最终可以从节点编辑器中尝试,$template=$env->getCompiler()->getFilename()
,但我对结果非常不确定。