Усы php space в шаблонах
У меня есть этот код шаблона:
{{#album}}
<h1>{{ hinfo.artist_name }}</h1>
<h2>{{ hinfo.name }}</h2>
{{/album}}
который оказывает:
<h1></h1><h2></h2>
Вместо этого, если я напишу:
{{#album}}
<h1>{{hinfo.artist_name}}</h1>
<h2>{{hinfo.name}}</h2>
{{/album}}
это успешно показывает:
<h1>my artist</h1><h2>my album name</h2>
В javascript-версии той же библиотеки такого поведения с пробелами не происходит. Я добавил функцию помощник в конструктор php:
$mustache = new Mustache_Engine(
array(
'loader' => new Mustache_Loader_FilesystemLoader(
self::$_dir,
array('extension' => '.mst')
),
/*
'helpers' => array(
'fn' => function($text, $render) {
$parsed = $render($text);
$date = date("F j, Y h:i", (int) $parsed);
return $date;
}
)*/
)
);
но не выполняется в этом примере.
Может кто-нибудь сказать мне, если это поведение правильно или это ошибка в версии усов 2.10?
2 ответа
Кажется, все работает как ожидалось. Я не уверен точно, в чем твоя проблема.
В Mustache.php, {{hinfo.artist_name}}
(без пробелов) правильный синтаксис.
В Mustache.js, {{ hinfo.artist_name }}
(с пробелами) правильный синтаксис.
Mustache.php поддерживает все имена тегов с пробелами в начале и конце или без них. Например, это именно то, что вы ожидаете:
<?php
require __DIR__ . '/vendor/autoload.php';
$m = new Mustache_Engine();
$tpl = <<<EOS
{{#album}}
<h1>{{ hinfo.artist_name }}</h1>
<h2>{{ hinfo.name }}</h2>
{{/album}}
EOS;
$tpl2 = <<<EOS
{{# album }}
<h1>{{ hinfo.artist_name }}</h1>
<h2>{{ hinfo.name }}</h2>
{{/ album }}
EOS;
$data = [
'album' => [
'hinfo' => [
'artist_name' => 'my artist',
'name' => 'my album name',
]
]
];
echo $m->render($tpl, $data);
echo $m->render($tpl2, $data);
assert($m->render($tpl, $data) === $m->render($tpl2, $data));
Выходные данные двух шаблонов идентичны.
Если это не то, что вы видите, предоставьте полный тестовый пример, и мы могли бы его отследить:)