如何在yii2中显示来自字符串的smarty模板?

时间:2016-05-27 23:46:46

标签: php yii2 smarty template-engine


我想在yii2中使用smarty模板引擎 在我的项目中,我需要从数据库加载视图代码并从控制器渲染它们。

我的问题是:

有没有办法从字符串渲染视图代码并像普通渲染一样控制它?

我需要以下内容:

$this->renderAsString($templateStr, ['param1'=>$val1, 'param2'=>$val2]);

这对我来说很重要,可以像index.tpl文件中的代码一样访问变量和函数。

$this->render('index.tpl'['param1'=>$val1, 'param2'=>$val2]);

我读过这个http://www.smarty.net/docs/en/resources.string.tpl,但我认为我的回答是不同的。

1 个答案:

答案 0 :(得分:1)

有一个名为yii2-smarty的特殊单独扩展,用于使用Smarty渲染视图。您需要通过Composer安装它,然后像这样配置使用:

return [
    //....
    'components' => [
        'view' => [
            'renderers' => [
                'tpl' => [
                    'class' => 'yii\smarty\ViewRenderer',
                    //'cachePath' => '@runtime/Smarty/cache',
                ],
            ],
        ],
    ],
];

至于你的具体问题,请看看Github上的这两个问题:

核心开发人员Klimov Paul建议使用eval,但在Smarty专用函数中也存在这种情况。

示例8.4。另一个{eval}示例

  

输出服务器名称(大写)和IP。分配   变量$str可以来自数据库查询。

<?php
$str = 'The server name is {$smarty.server.SERVER_NAME|upper} '
       .'at {$smarty.server.SERVER_ADDR}';
$smarty->assign('foo',$str);
?>
  

模板的位置是:

{eval var=$foo}