为了剥离前后端,项目的前端使用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过去呢。这个小想法破灭了~.~