gpt4 book ai didi

PHP Mustache 2.1 部分加载不基于文件名

转载 作者:可可西里 更新时间:2023-11-01 13:55:03 24 4
gpt4 key购买 nike

有没有一种方法可以根据文件名值数组加载部分文件?

目前,如果我编写此 {{> sidebar}},它将查找 views/sidebar.mustache。 (基于模板加载器类,我可以在其中指定查找模板的位置)

理想情况下,我希望 {{> sidebar}} 是一个变量名而不是文件名。

如果我传递给加载程序,我想要实现的是寻找不基于文件名的边栏部分:

$partials = array(
'sidebar' => 'folder1/somefile'
);

这将转换为:views/folder1/somefile.mustache

最佳答案

您可以通过添加新的部分加载器实现轻松地做到这一点。你可以制作一个“别名加载器”,它存储这些模板引用:

class FilesystemAliasLoader extends Mustache_Loader_FilesystemLoader implements Mustache_Loader_MutableLoader
{
private $aliases = array();

public function __construct($baseDir, array $aliases = array())
{
parent::__construct($baseDir);
$this->setTemplates($aliases);
}

public function load($name)
{
if (!isset($this->aliases[$name])) {
throw new Mustache_Exception_UnknownTemplateException($name);
}

return parent::load($this->aliases[$name]);
}

public function setTemplates(array $templates)
{
$this->aliases = $templates;
}

public function setTemplate($name, $template)
{
$this->aliases[$name] = $template;
}
}

然后,您可以将其设置为部分加载器:

$partials = array(
'sidebar' => 'folder1/somefile'
);

$mustache = new Mustache_Engine(array(
'loader' => new Mustache_Loader_FilesystemLoader('path/to/templates'),
'partials_loader' => new FilesystemAliasLoader('path/to/partials'),
'partials' => $partials,
));

...或者您可以将别名传递给加载器构造函数,或者您甚至可以稍后在加载器或引擎实例上设置它们:

$loader = new FilesystemAliasLoader('path/to/partials', $partials);
$loader->setTemplates($partials);
$mustache->setPartials($partials);

关于PHP Mustache 2.1 部分加载不基于文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14878970/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com