我想在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,但我认为我的回答是不同的。
答案 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}