2012-04-24 16 views
2

口髭のテンプレートに問題があります。誰かが助けてくれることを願っています。具体的には、テンプレート内にデータ項目として部分を埋め込むと、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 

が、私はそれが動作テンプレートに直接{{> embedded}}を入れた場合はどのような実際に起こることが一つの理由のために、

header {{> embedded}} footer 

ですか別の、私は今すぐその価値をハードコードすることはできません。私はまた、テンプレートはクライアント側でjavascriptで同等に機能する必要があるため、PHP固有のソリューションは使用できません。

答えて

2

Mustacheがテンプレートを完全に解析しています。それはそれらを二重解析していないだけです。実際には、Mustacheはではなくで、テンプレートを二重解析します。そうすることで、口ひげ注射(SQLインジェクションと同じですがテンプレート用)の機会が生まれます。これは悪いことです:)

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

+1

heh、私はそれよりももっと権威的な答えを得るつもりはないと思う...あなたは口ひげの注射とそれがどうなるかを詳しく説明できますか?私が理解しているように、Mustacheは部分的に再帰的に解析するので、上で試したこととはどのように違いますか?ありがとう! – davethegr8

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)); 
+0

あなたの投稿の質を向上させるには、なぜあなたの答えが問題を解決するのかを記入してください。 –

関連する問題