2012-04-24 2 views
2

콧수염 짜기에 문제가 있습니다. 누군가 도와 드릴 수 있기를 바랍니다. 특히, 템플릿에 데이터 항목으로 부분을 포함하면 Mustache가 내 템플릿을 완전히 구문 분석하지 않습니다. Partials를 데이터로 포함하여 모든 템플릿을 완전히 구문 분석하려면 어떻게해야합니까?콧수염에 데이터로 부분 삽입하기

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

또는 또 다른, 나는 그 값을 지금 하드 코딩 할 수 없습니다. 템플릿은 클라이언트 측 자바 스크립트에서도 똑같이 잘 작동해야하기 때문에 PHP 전용 솔루션을 사용할 수 없습니다.

답변

2

콧수염은 템플릿을 "완전히 파싱"합니다. 두 번 파싱하지 않는 것뿐입니다. 사실, 콧수염은 이 아니며이 아니며 템플릿을 두 번 구문 분석합니다. 그렇게하면 콧수염 주입을위한 기회가 생깁니다 (SQL 주입과 같지만 템플릿 용). 이것은 나쁜 것입니다 :)

고차원 섹션으로 찾고자하는 것이 가능하지만 코드가 필요합니다. 즉, PHP와 자바 스크립트 구현 모두를 작성하는 것은 너무 어렵지 않아야합니다.

+1

heh, 나는 그보다 권위있는 답변을 얻지 못할 것이라 생각합니다 ... 콧수염 주입과 어떻게 일어날 수 있는지 자세히 설명해 주시겠습니까? 내가 이해하는 바와 같이, 콧수염은 부분적으로 반복적으로 파싱을한다. 그래서 내가 위에서 시도한 것과 어떻게 다른가? 감사! – 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

게시물의 품질을 향상 시키려면 답변으로 인해 문제가 해결되는 이유/방법을 포함 시키십시오. –

관련 문제