php - PHP 中的超轻型模板系统,不允许模板内的 php 代码或使用 eval

标签 php parsing templates template-engine

我正在寻找一个非常基本的 PHP 模板系统。现在我正在使用:

/**
 * Renders a single line. Looks for {{ var }}
 *
 * @param string $string
 * @param array $parameters
 *
 * @return string
 */
function renderString($string, array $parameters)
{
    $replacer = function ($match) use ($parameters)
    {
        return isset($parameters[$match[1]]) ? $parameters[$match[1]] : $match[0];
    };

    return preg_replace_callback('/{{\s*(.+?)\s*}}/', $replacer, $string);
}

(从这里开始:PHP - Extremely light templating system)

但我只能分配和显示变量。我还需要一种方法来使用 IF 和循环数组等条件。

我找到了 Rain TPL - http://www.raintpl.com/Quick-Start/#if - 这与我正在寻找的非常接近,但有几件事我不喜欢它:

  • 它允许编写模板的人运行 PHP 函数(在 IF 条件内)。
  • 它写入缓存和 php 文件,这是我不想要的

那么,有没有类似的东西,但更“基本”、更严格、更安全?

最佳答案

Twig可能适合你。

它可以执行条件,并且具有针对不受信任代码的沙箱模式。

它进行编译和缓存,但似乎可以关闭。

关于php - PHP 中的超轻型模板系统,不允许模板内的 php 代码或使用 eval,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5769396/

相关文章:

parsing - 如何选择 <dei :DocumentType from XBRL using Cheerio (or

django - 无法在 Django 模板中渲染 View

c++ - 使用右值引用重载模板化可变参数运算符

php - mysql - UNION 项目的参数未包含在先前选择的项目中

python - 分词建议

php - 我应该为 PDO 使用哪种类型的占位符以获得更快的性能?

java - 如何使用Nutch抓取并解析精确的数据?

c++ - Ceres-Solver成本函数继承错误: Templates may not be virtual

php - 如何使 apache 错误日志条目更长

php - 如何在 Twig 中设置多维数组?