模板中的小胡子 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));

两个模板的输出是一样的。

如果这不是您所看到的,请提供完整的测试用例,我们也许能够找到它:)