在Yii框架中使用PHP模板引擎Twig的例子
Twig是一款快速、安全、灵活的PHP模板引擎,它内置了许多filter和tags,并且支持模板继承,能让你用最简洁的代码来描述你的模板。他的语法和Python下的模板引擎Jinjia以及Django的模板语法都非常像。 比如我们在PHP中需要输出变量并且将其进行转义时,语法比较累赘: 代码如下: 但是在Twig中可以这样写: 代码如下: {{ var }} {{ var|escape }} {{ var|e }} {# shortcut to escape a variable #} 遍历数组: 代码如下: {% for user in users %}
* {{ user.name }} {% else %} No user has been found. {% endfor %} 但是要在Yii Framework集成Twig就会遇到点麻烦了,官方网站中已经有能够集成Twig的方案,所以这里我也不再赘述。但是由于Twig中是不支持PHP语法的,所以在有些表达上会遇到困难,比如我们在写Form的视图时,经常会这么写: 代码如下: beginWidget('CActiveForm'); ?> Login
error($model,'password'); ?> endWidget(); ?> 但是这样的语法是没法在twig中表达的,所以想去扩展下Twig的功能,让他能够支持我们自定义的widget标签,然后自动解析成我们需要的代码。 总共需要两个类:TokenParser和Node,下面直接上代码: 代码如下: /* * This file is an extension of Twig. * * (c) 2010 lfyzjck */ /** $name = $stream->expect(Twig_Token::STRING_TYPE); $stream->expect(Twig_Token::NAME_TYPE); $body = $this->parser->subparse(array($this,'decideBlockEnd'),true); return new Yii_Node_WidgetBlock(array( /** public function decideBlockEnd(Twig_Token $token) class Yii_Node_WidgetBlock extends Twig_Node public function compile(Twig_Compiler $compiler) $compiler->indent()->subcompile($this->getNode('body')); $compiler->raw('$context["this"]->endWidget();'); 然后在Twig初始化的地方增加我们的语法解析类: 代码如下: $twig->addTokenParser(new Yii_WidgetBlock_TokenParser); 然后我们就可以在twig的模板里这么写了: 代码如下: {% beginwidget 'CActiveForm' as form %}
{% endwidget %} (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |