Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.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 将片段作为数据嵌入到Mustach中_Php_Mustache - Fatal编程技术网

Php 将片段作为数据嵌入到Mustach中

Php 将片段作为数据嵌入到Mustach中,php,mustache,Php,Mustache,我遇到了胡子模板的问题,我希望有人能帮我。具体地说,如果我将一个分部作为数据项嵌入到模板中,Mustach不会完全解析模板如何让Mustach完全解析所有模板,包括作为数据的部分? <?php $m = new Mustache; $template = ' {{header}} {{body}} {{footer}} '; $data = array( 'header' => 'header', 'body' => '{{>

我遇到了胡子模板的问题,我希望有人能帮我。具体地说,如果我将一个分部作为数据项嵌入到模板中,Mustach不会完全解析模板如何让Mustach完全解析所有模板,包括作为数据的部分?

<?php
$m = new Mustache;

$template = '
    {{header}}
    {{body}}
    {{footer}}
';

$data = array(
    'header' => 'header', 
    'body' => '{{> embedded}}', 
    'footer' => 'footer'
);

$partials = array(
    'embedded' => 'embedded'
);

die($m->render($template, $data, $partials));
?>
但实际发生的是

header {{> embedded}} footer
如果我将
{{>embedded}}
直接放入模板中,它就可以工作,但是由于这样或那样的原因,我现在无法硬编码该值。我也不能使用特定于php的解决方案,因为模板需要在客户端与javascript同样出色地工作。

Mustach正在“完全解析”模板。这不是双重解析。事实上,Mustach需要特别的努力来避免双重解析模板。这样做将为mustache注入创造机会(就像SQL注入一样,但对于模板)。这是一件坏事:)


使用高阶部分可以完成您想要的内容,但这需要一些代码。也就是说,编写PHP和JavaScript实现应该不会太难。

这样就可以了。你觉得怎么样

    $partials = array(
        'embedded' => 'embedded'
    );

    $m = new Mustache_Engine(array('partials' => $partials));

    $template = '
        {{header}}
        {{>embedded}}
        {{footer}}
    ';

    $data = array(
        'header' => 'header', 
        'footer' => 'footer'
    );

    die($m->render($template, $data, $partials));

嘿,我怀疑我能得到比这更权威的答案。。。你能详细说明一下胡子注射以及它是如何发生的吗?据我所知,Mustach递归地解析各个部分,那么这和我上面尝试的有什么不同呢?谢谢为了提高你的文章质量,请包括你的答案为什么/如何解决问题。
    $partials = array(
        'embedded' => 'embedded'
    );

    $m = new Mustache_Engine(array('partials' => $partials));

    $template = '
        {{header}}
        {{>embedded}}
        {{footer}}
    ';

    $data = array(
        'header' => 'header', 
        'footer' => 'footer'
    );

    die($m->render($template, $data, $partials));