我正在尝试创建自己的模板系统,但目前还处于困境。我不知道怎么做。
在我的模板文件中,我目前有:
@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这样的模板引擎来说,自己做是不可取的。但是我的课可以给你一些见解来创建你自己的
祝好运