如何在 Timber WordPress 插件中添加 TWIG 的沙盒扩展?
How do I add the Sandbox extension for TWIG in the Timber WordPress plugin?
我想添加 Sandbox 扩展以使用 Timber for WordPress 评估不受信任的代码(包括使用 composer 但我在使用插件时得到相同的结果)。
以下(简化的)代码会导致致命错误。
add_filter('timber/twig', function($twig){
$filters = array_diff(array_keys($twig->getFilters()), ['function']);
$policy = new \Twig\Sandbox\SecurityPolicy([], $filters, [], [], []);
$twig->addExtension(new \Twig\Extension\SandboxExtension($policy, true));
return $twig;
});
错误是:“致命错误:未捕获的异常:无法注册扩展“沙箱”,因为扩展已经初始化。”
如果应用的过滤器是 timber/twig 或 twig_apply_filters 没有区别。
这是添加此扩展程序的错误位置吗?它似乎只在调用 Timber::compile_string 时执行。
我在 PHP 7.3.x
上使用最新版本的 WordPress 和 Timber
$twig->getFilters()
导致扩展被初始化,因此不能在这里用于此目的。没有错误,删除此代码时注册了沙箱扩展。
我想添加 Sandbox 扩展以使用 Timber for WordPress 评估不受信任的代码(包括使用 composer 但我在使用插件时得到相同的结果)。
以下(简化的)代码会导致致命错误。
add_filter('timber/twig', function($twig){
$filters = array_diff(array_keys($twig->getFilters()), ['function']);
$policy = new \Twig\Sandbox\SecurityPolicy([], $filters, [], [], []);
$twig->addExtension(new \Twig\Extension\SandboxExtension($policy, true));
return $twig;
});
错误是:“致命错误:未捕获的异常:无法注册扩展“沙箱”,因为扩展已经初始化。”
如果应用的过滤器是 timber/twig 或 twig_apply_filters 没有区别。
这是添加此扩展程序的错误位置吗?它似乎只在调用 Timber::compile_string 时执行。
我在 PHP 7.3.x
上使用最新版本的 WordPress 和 Timber$twig->getFilters()
导致扩展被初始化,因此不能在这里用于此目的。没有错误,删除此代码时注册了沙箱扩展。