我遇到了胡子模板的问题,我希望有人可以提供帮助。具体来说,如果我在我的模板中嵌入了一个部分作为数据项,那么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同样运行良好。
答案 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));