Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 修改细枝节点_Php_Twig - Fatal编程技术网

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()
,但我对结果非常不确定。