在Moustache中将Partials作为数据嵌入

时间:2012-04-24 22:55:43

标签: php mustache

我遇到了胡子模板的问题,我希望有人可以提供帮助。具体来说,如果我在我的模板中嵌入了一个部分作为数据项,那么Mustache并不能完全解析我的模板。 如何让Mustache完全解析所有模板,包括部分数据?

<?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

但实际发生的是

header {{> embedded}} footer

如果我将{{> embedded}}直接放入模板中,它会起作用,但由于某种原因,我现在无法对该值进行硬编码。我也不能使用特定于PHP的解决方案,因为模板需要在客户端使用javascript同样运行良好。

2 个答案:

答案 0 :(得分:2)

Mustache正在“完全解析”您的模板。它不是对它们进行双重解析。实际上,Mustache需要特定的痛苦而不是才能对模板进行双重解析。这样做会为小胡子注入创造机会(比如SQL注入,但对于你的模板)。这是一件坏事:)

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

答案 1 :(得分:0)

这种方式会做。你觉得怎么样?

    $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));