从 Mustache 访问回调的方法
Access to a callback's method from Mustache
谁能解释一下如何从 Mustache 模板创建对象并调用它的方法?
我想给 Mustache 添加一些回调作为助手:
$options['helpers'] = array(
'Post' => array('\Classes\Post', 'getObject')
);
这是一个示例 class:
namespace Classes;
class Post
{
public static function getObject()
{
return new Post(\Request::postId());
}
public function post()
{
$post = new \stdClass;
$post->title = 'Title';
$post->content = 'Content';
return $post;
}
public function comments()
{
$comment = new \ArrayObject();
$comment[0] = new stdClass;
$comment[0]->name = 'David';
$comment[0]->content = 'I\'m David';
$comment[1] = new stdClass;
$comment[1]->name = 'Mary';
$comment[1]->content = 'I\'m Mary';
$comment[2] = new stdClass;
$comment[2]->name = 'Sana';
$comment[2]->content = 'I\'m Sana';
return $post;
}
}
并在 post.Mustache 文件中使用它:
<h1>{{Post.title}}</h1>
<p>{{Post.content}}</p>
<hr>
{{#Post.comments}}
<b>{{name}}</b> Said: {{content}}<br><br>
{{/Post.comments}}
但是,这似乎不是访问链式方法和属性的正确方法?!
简短的回答是,如果您传入值而不是让模板调用来获取它们,Mustache 会工作得更好:)
$m->render($tpl, ['Post' => Post::getObject()]);
如果您对更长的答案感兴趣:
助手只是渲染上下文中的奖励值。所以添加 Post 助手等同于使用 ['Post' => ['Post', 'getObject']]
.
调用 render()
在 Mustache 中,如果标签的 value 是一个函数,它会以特殊方式处理(它们称为 lambda)。您可以查看示例 on the Mustache.php wiki.
所以在你的情况下,你 运行 对这种区别感到奇怪。基本上,渲染调用中 {{Post}}
的值不是新的 post,它是可调用的 ['Post', 'getObject']
。因此该值触发了 lambda 逻辑而不是正常的字符串插值。
谁能解释一下如何从 Mustache 模板创建对象并调用它的方法?
我想给 Mustache 添加一些回调作为助手:
$options['helpers'] = array(
'Post' => array('\Classes\Post', 'getObject')
);
这是一个示例 class:
namespace Classes;
class Post
{
public static function getObject()
{
return new Post(\Request::postId());
}
public function post()
{
$post = new \stdClass;
$post->title = 'Title';
$post->content = 'Content';
return $post;
}
public function comments()
{
$comment = new \ArrayObject();
$comment[0] = new stdClass;
$comment[0]->name = 'David';
$comment[0]->content = 'I\'m David';
$comment[1] = new stdClass;
$comment[1]->name = 'Mary';
$comment[1]->content = 'I\'m Mary';
$comment[2] = new stdClass;
$comment[2]->name = 'Sana';
$comment[2]->content = 'I\'m Sana';
return $post;
}
}
并在 post.Mustache 文件中使用它:
<h1>{{Post.title}}</h1>
<p>{{Post.content}}</p>
<hr>
{{#Post.comments}}
<b>{{name}}</b> Said: {{content}}<br><br>
{{/Post.comments}}
但是,这似乎不是访问链式方法和属性的正确方法?!
简短的回答是,如果您传入值而不是让模板调用来获取它们,Mustache 会工作得更好:)
$m->render($tpl, ['Post' => Post::getObject()]);
如果您对更长的答案感兴趣:
助手只是渲染上下文中的奖励值。所以添加 Post 助手等同于使用 ['Post' => ['Post', 'getObject']]
.
在 Mustache 中,如果标签的 value 是一个函数,它会以特殊方式处理(它们称为 lambda)。您可以查看示例 on the Mustache.php wiki.
所以在你的情况下,你 运行 对这种区别感到奇怪。基本上,渲染调用中 {{Post}}
的值不是新的 post,它是可调用的 ['Post', 'getObject']
。因此该值触发了 lambda 逻辑而不是正常的字符串插值。