为了剥离前后端,项目的前端使用smarty模板引擎,后端开发框架是yii2。官方基于smarty专门开发了yii2-smarty拓展用于yii2的项目中。
yii2-smarty的官方地址是: https://github.com/yiisoft/yii2-smarty
坑爹的是,项目里的文档基本上都在说怎么安装,怎么使用smarty语法。想简单的改变smarty默认的单括号为双括号也没找到该怎么改。
一开始以为用的smarty是yii2自己实现的,简化版不支持这些配置。这几天来自喵的刚性需求,想着官方没有实现,那就自己实现,自给自足。
为了达到这个目的,首先查找原生smarty配置,发现可以通过通过 left_delimiter和 right_delimiter 两个选项设置。接下来就是到yii2-smarty的项目,看看包装成yii/web/View可以调用的renderer需要怎么做。看源代码的时候瞄到了如下代码:
$this->smarty->$key = $value;
心想这不是支持的吗?!马上跑到配置文件里设置:
'view' => [ 'class' => 'app/library/View', 'renderers' => [ 'tpl' => [ 'class' => 'yii/smarty/ViewRenderer', 'cachePath' => '@runtime/Smarty/cache', 'left_delimiter' => '{{', 'right_delimiter' => '}}', ], ], ],
添加了之后,执行脚本提示 没有 left_delimiter 这个属性! shenmegui!
再仔细细看yii2-smarty的源码,发现整体是:
foreach ($this->options as $key => $value) { $this->smarty->$key = $value; }
我去,原来是要放在options里面啊!既然弄明白了,那么配置改成:
'view' => [ 'class' => 'app/library/View', 'renderers' => [ 'tpl' => [ 'class' => 'yii/smarty/ViewRenderer', 'cachePath' => '@runtime/Smarty/cache', 'options' => [ 'left_delimiter' => '{{', 'right_delimiter' => '}}', ], ], ], ],
再次测试,发现OK了!
嗯,接下来smarty的配置都知道该怎么做了~
PS: 一开始以为官方没有实现这个功能,还想着能够添加之后pull request过去呢。这个小想法破灭了~.~