Mustache中的动态部分引用

时间:2016-09-28 11:12:32

标签: php mustache

想知道是否可以根据变量动态引用部分。

考虑下面过度简化的上下文,模板和示例呈现 -

test.php的

<?php

$context = [
    //...
    "partial" => "partial/to/include"
    //...
];

echo (new Mustache_Engine)->render(
    "<h1>Test template</h1> {{> {{ partial }} }}",
    $context
);

现在很明显,这不会起作用,但它说明了一点(我希望)。有没有一个干净的解决方案来解决这个问题?

我只能看到自己的三种解决方案,没有一种是理想的 -
1.助手
2.扩展Mustache_Engine类 3. If / Not阻止并将模板名称设置为在上下文中具有布尔值的键(有很多可能被引用的部分,这是不可维护的)

1 个答案:

答案 0 :(得分:0)

有些人为的,但是您似乎可以通过定义一个函数来实现,包括以下内容:

$context = [
    'partial' => function () { return '{{> partial/to/include }}'; },
];

echo (new Mustache_Engine)->render(
    '<h1>Test template</h1> {{{ partial }}}',
    $context
);

如果您要使用两次以上,可以将其清理干净,并得到以下内容:

function dynamic_partial($partial) {
    return function () use ($partial) {
        return "{{> $partial }}";
    };
}

$context = [
    'partial' => dynamic_partial('partial/to/include'),
];

echo (new Mustache_Engine)->render(
    '<h1>Test template</h1> {{{ partial }}}',
    $context
);

也许有更清洁的方法,但这是我发现的方法。