1

我正在尝试制作自己的模板系统,但我被困在这一点上。我不知道该怎么做。

在我的模板文件中,我目前有:

@list $users => $user:
    <li>{{$user}}</li>
@endlist

我希望它作为一个 foreach 工作,在我的 $this->users 变量中显示用户。

我已经尝试过了,但我被困在这里。我希望有一个人可以帮助我 :-)

到目前为止我的代码(不起作用):

preg_match_all("/\@list(.*)\=\>(.*)\:/is", $e, $hmm);

  foreach ( $hmm as $hm):
     print_r($hm);exit;
     $eval = 'foreach ('.$hm[1].' as '.$hm[2].'):';

     eval($eval);
     echo ":P";

  endforeach;
4

2 回答 2

1

我不想吓到你,但看看 Twig_Lexer:

https://github.com/fabpot/Twig/blob/master/lib/Twig/Lexer.php 这是一个令牌解析器,可以将 Twig 语法转换成自己的语言。

但是,关于您的即时需求,这是For它用于编译的节点foreach loop

https://github.com/fabpot/Twig/blob/master/lib/Twig/Node/For.php

即使您没有完全复制它,即使您确实使用eval了它,它也应该为您提供一些关于如何操作的好线索,例如使用$context数组来存储 Twig 变量。

于 2013-08-07T08:26:00.730 回答
-1

也许这段代码可以提供一些指导:旧模板类

模板 :

   $template = '{Template.Repeat.Users}
        <li>{Template.Var.userName}</li>
    {/Template.Repeat}';

PHP:

echo TemplateMananger::parse($template, array(array('userName'= > 'foo'), array('userName' => 'bar'));

无论如何,使用像 Twig 这样的模板引擎,不建议自己做。但是也许我的课可以给你一些见解来创建你自己的

祝你好运

于 2013-08-07T08:29:58.090 回答