2

口ひげのテンプレートに問題が発生しているので、誰かが助けてくれることを願っています。具体的には、パーシャルをデータアイテムとしてテンプレートに埋め込んだ場合、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}}と機能しますが、何らかの理由で、現在その値をハードコーディングすることはできません。また、テンプレートはjavascriptを使用してクライアント側でも同様に機能する必要があるため、php固有のソリューションを使用することはできません。

4

2 に答える 2

2

Mustacheは、テンプレートを「完全に解析」しています。それらを二重に解析するだけではありません。実際、Mustacheは、テンプレートを二重に解析しないように特別な苦労をします。そうすることで、口ひげを注入する機会が生まれます(SQLインジェクションと同様ですが、テンプレート用です)。これは悪いことです:)

高次のセクションで探していることを達成することは可能ですが、それにはいくつかのコードが必要になります。そうは言っても、PHPとJavaScriptの両方の実装を作成するのはそれほど難しいことではありません。

于 2012-04-25T10:32:18.187 に答える
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));
于 2012-10-05T21:52:44.823 に答える