胡子中的动态局部引用

问题描述 投票:2回答:1

想知道是否可以基于变量动态引用局部。

请在下面考虑此过于简化的上下文,模板和示例呈现-

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阻止并将模板名称设置为上下文内具有布尔值的键(有很多部分可能被引用,这是无法维护的)

php mustache
1个回答
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
);

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

© www.soinside.com 2019 - 2024. All rights reserved.