【问题标题】:How do I use a template engine in Yii?如何在 Yii 中使用模板引擎?
【发布时间】:2025-12-15 07:50:01
【问题描述】:

我想用 Yii 写一个程序,让用户可以拥有他们的模板。

我的解决方案是每个用户在数据库中都有一条记录,以保留自定义模板(如 HTML 代码)和一些语法(如 Smarty 或 Twig)。

我如何使用 PHP 来获取这些记录并将其打印在屏幕上,我的模板引擎会提取语法并显示最佳结果?这可能吗?我该怎么做?

你真的知道如果你将php代码保存在数据库中,当你将它们打印到文件中时,你保存在数据库中的php代码不会运行。 对我来说,最重要的是将模板保存在数据库中的 php 命令中,然后在文件中回显它们,并且 php 代码通常运行相同。

但重要的是使用 smarty 或 twig 并且不要让用户直接添加 php 代码。

【问题讨论】:

  • 请详细说明预期结果。很难得到你想要达到的目标,
  • 我编辑我的问题。谢谢
  • 如果可能,不要让您的用户编写自己的 php 代码。这使您的用户可以使用您的 php 解释器运行的任何权限在您的系统上执行任何操作,这是一个重大的安全漏洞。就此而言,也不要让他们编写 HTML 代码。对于大多数任务,markdown 就足够了。

标签: php yii2 twig smarty template-engine


【解决方案1】:

我找到了答案。 只需将所有内容保存在数据库中,然后在加载它们时使用 eval() 函数。 请参阅 php 和 w3school 中的文档。

【讨论】:

    【解决方案2】:

    对于用户界面模板,您可以在 Yii 中使用不同的布局。只需将您不同的布局模板放在./views/layouts 文件夹中即可:

    ./views/layouts/main-template-1.php
    ./views/layouts/main-template-2.php
    ./views/layouts/main-template-3.php
    

    并根据控制器中应该知道的用户在执行操作时选择控制器中的布局。

    编辑:无需从用户上传布局文件,您可以从数据库(HTML 骨架)加载模板代码,然后在控制器中将布局和视图代码放在一起:

    $contentWithoutLayout = $this->renderPartial('myview',...);
    return $this->applyLayout(contentWithoutLayout, $layoutFromDb);
    

    applyLayout() 是您合并布局和查看内容的方法。

    【讨论】:

    • 是的,我知道这一点,但我不想让用户上传文件,我需要让用户自定义他们的模板。