【问题标题】:How show smarty template from string in yii2?如何在 yii2 中从字符串中显示 smarty 模板?
【发布时间】:2016-09-26 09:38:21
【问题描述】:


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

【问题讨论】:

    标签: php yii2 smarty template-engine


    【解决方案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}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-28
      • 2019-02-08
      • 1970-01-01
      • 2012-06-19
      • 2014-11-22
      • 1970-01-01
      • 2014-07-07
      • 2016-08-05
      相关资源
      最近更新 更多