模板中的小胡子 php space
Mustache php space in templates
我有这个模板代码:
{{#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 version 中,这种带有空格的行为不会发生。我在 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;
}
)*/
)
);
但在这个例子中没有被执行。
谁能告诉我这种行为是正确的还是 mustache 2.10 版本中的错误?
一切似乎都按预期进行。我不确定确切你的问题是什么。
在 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));
两个模板的输出是一样的。
如果这不是您所看到的,请提供完整的测试用例,我们也许能够找到它:)
我有这个模板代码:
{{#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 version 中,这种带有空格的行为不会发生。我在 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;
}
)*/
)
);
但在这个例子中没有被执行。
谁能告诉我这种行为是正确的还是 mustache 2.10 版本中的错误?
一切似乎都按预期进行。我不确定确切你的问题是什么。
在 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));
两个模板的输出是一样的。
如果这不是您所看到的,请提供完整的测试用例,我们也许能够找到它:)