我希望有一个Mustache模板引用部分,其中partial也将数据添加到上下文中。而不必将数据中的数据定义为初始的Mustache渲染。
我在https://gist.github.com/lode/ecc27fe1ededc9b4a219
中有一个模型归结为:
<?php
// controller
$options = array(
'partials' => array(
'members_collection' => new members_collection
)
);
$mustache = new Mustache_Engine($options);
$template = '
<h1>The team</h1>
{{> members_collection}}
';
echo $mustache->render($template);
// viewmodel
class members_collection {
public $data;
public function __toString() {
$template = '
<ul>
{{# data}}
{{.}}
{{/ data}}
</ul>
';
$mustache = new Mustache_Engine();
return $mustache->render($template, $this);
}
public function __construct() {
$this->data = array(
'Foo Bar',
'Bar Baz',
'Baz Foo',
);
}
}
这会产生类似Cannot use object of type members_collection as array
的错误。
有没有办法让这项工作?或者使用__toString
的方式不正确?并使用partials_loader或__invoke
帮助?我得到了它,但可能会错过任何东西。
答案 0 :(得分:1)
在上面的示例中,members_collection
不是部分的,而是子视图。两个非常小的更改使其工作:在选项数组中,将partials
键更改为helpers
;并且,在父模板中,从部分标记更改为未转义的插值标记({{> members_collection}}
- &gt; {{{members_collection}}}
)。
<?php
require '/Users/justin/Projects/php/mustache/mustache.php/vendor/autoload.php';
// controller
$options = array(
'helpers' => array(
'members_collection' => new members_collection
)
);
$mustache = new Mustache_Engine($options);
$template = '
<h1>The team</h1>
{{{members_collection}}}
';
echo $mustache->render($template);
// viewmodel
class members_collection {
public $data;
public function __toString() {
$template = '
<ul>
{{# data}}
{{.}}
{{/ data}}
</ul>
';
$mustache = new Mustache_Engine();
return $mustache->render($template, $this);
}
public function __construct() {
$this->data = array(
'Foo Bar',
'Bar Baz',
'Baz Foo',
);
}
}
答案 1 :(得分:0)
我假设你在PHP中使用bobthecow PHP实现Mustache模板。
截至上次我检查过,Mustache PHP它并不支持数据驱动的部分。你想要一种控制器&#39;支持部分...然而,目前部分只是简单包括这个文件样式部分。
你自己必须建立这个。祝你好运!