Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 访问回调';从胡子上取法_Php_Oop_Callback_Mustache_Template Engine - Fatal编程技术网

Php 访问回调';从胡子上取法

Php 访问回调';从胡子上取法,php,oop,callback,mustache,template-engine,Php,Oop,Callback,Mustache,Template Engine,有人能解释一下如何从一个小胡子模板创建对象并调用它的方法吗 我想向Mustach添加一些回调作为助手: $options['helpers'] = array( 'Post' => array('\Classes\Post', 'getObject') ); 下面是一个示例类: namespace Classes; class Post { public static function getObject() { return new Post

有人能解释一下如何从一个小胡子模板创建对象并调用它的方法吗


我想向Mustach添加一些回调作为助手:

$options['helpers'] = array(
    'Post' => array('\Classes\Post', 'getObject')
);
下面是一个示例类:

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}}
{{Post.title}
{{Post.content}


{{{Post.comments} {{name}}说:{{content}}

{{/Post.comments}

但是,这似乎不是访问链接方法和属性的正确方法

简单的回答是,如果您传入值,而不是让模板调用来获取值,那么Mustach的效果会更好:)

如果您对较长的答案感兴趣:

助手只是渲染上下文中的附加值。因此,添加Post助手相当于使用
['Post'=>['Post','getObject']]
调用render()

在Mustache中,如果标记的值是一个函数,则会以一种特殊的方式处理它(称为lambdas)。你可以看到一些例子


所以在你的情况下,你会因为这种区别而感到奇怪。基本上,渲染调用中的
{{{Post}}
值不是新的Post,而是可调用的
['Post','getObject']
。因此,该值触发的是lambda逻辑,而不是普通的字符串插值。

简单的回答是,如果您传入值,而不是让模板调用来获取值,那么Mustach的效果会更好:)

如果您对较长的答案感兴趣:

助手只是渲染上下文中的附加值。因此,添加Post助手相当于使用
['Post'=>['Post','getObject']]
调用render()

在Mustache中,如果标记的值是一个函数,则会以一种特殊的方式处理它(称为lambdas)。你可以看到一些例子


所以在你的情况下,你会因为这种区别而感到奇怪。基本上,渲染调用中的
{{{Post}}
值不是新的Post,而是可调用的
['Post','getObject']
。因此,该值触发的是lambda逻辑,而不是普通的字符串插值。

感谢Justin给出的上述答案,以及您伟大的Mustach实现。由于我们特殊的体系结构、原则和限制,我们不能向Mustache添加对象或lambda,数组回调是我们唯一的选择。因此,我们将决定要么使用叉形胡须,要么实现我们自己的模板引擎,以满足我们的需求。再次感谢您的大胡子实施;{感谢Justin的上述回答,以及您出色的Mustache实现。由于我们特殊的体系结构、原则和限制,我们无法向Mustache添加对象或lambda,数组回调是我们唯一的选择。因此,我们将决定使用fork Mustache或实现我们自己的模板引擎,以满足我们的需要。谢谢感谢你的大胡子{
$m->render($tpl, ['Post' => Post::getObject()]);