最终用户的模板语言

时间:2015-08-01 01:49:42

标签: php laravel twig

在我的laravel应用程序中,我希望最终用户能够自定义某些电子邮件内容和某些页面内容

因此,在我的SaaS产品中,他们可以自定义欢迎电子邮件,或者有人加入平台后自定义页面。

我目前正在为他们提供一些占位符供他们使用;即

Hello $FirstName$,

然后在我的代码中我只是做

$content = str_replace(['$FirstName$', '....'...

这就是为什么我知道他们不会添加任何PHP或任何东西。但是,我需要做一个if语句,并循环一个对象,所以我已经达到了我的str_replace方法的极限。

我无法使用刀片,因为它允许他们使用<?php,因此他们可能会混淆应用程序。

Twig听起来很合适。

因此;

  • 用户编辑内容并保存到数据库中。
  • 我会传递一些具有可以使用的值的对象
  • 安全可靠;无法调用php /突破模板
  • 使用IF语句循环并检查。

有类似的东西吗?

1 个答案:

答案 0 :(得分:0)

是的,twig支持使用sandbox extension加载不受信任的模板。

  

sandbox扩展名可用于评估不受信任的代码。禁止访问不安全的属性和方法。沙箱安全性由策略实例管理。默认情况下,Twig附带一个策略类:Twig_Sandbox_SecurityPolicy。此类允许您列出一些标签,过滤器,属性和方法:

$tags = array('if');
$filters = array('upper');
$methods = array(
    'Article' => array('getTitle', 'getBody'),
);
$properties = array(
    'Article' => array('title', 'body'),
);
$functions = array('range');
$policy = new Twig_Sandbox_SecurityPolicy($tags, $filters, $methods, $properties, $functions);

然后您将使用它like this

{% sandbox %}
    {% include 'user.html' %}
{% endsandbox %}

默认情况下无法从twig模板执行原始PHP,因此您的用户将无法滥用系统太多。它们仍然可能导致无限循环,但是没有允许超过字符串替换的系统可以防止这种情况。