Foreach在我自己的模板系统中


Foreach in my own template system

我正在尝试创建自己的模板系统,但目前还处于困境。我不知道怎么做。

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

@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;

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

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

但是,对于您的直接需求,这是它用来编译foreach loop:的For节点

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

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

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

模板:

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

PHP:

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

不管怎样,对于Twig这样的模板引擎来说,自己做是不可取的。但是我的课可以给你一些见解来创建你自己的

祝好运