如何通过Timber为Twig制作自定义逃生者?

时间:2019-01-19 19:00:15

标签: php wordpress twig timber

我正在WordPress中使用Twig和Timber,我想根据Twig的文档制作custom escaper

$twig = new Twig_Environment($loader);
$twig->getExtension('Twig_Extension_Core')->setEscaper('csv', 'csv_escaper');

// before Twig 1.26
$twig->getExtension('core')->setEscaper('csv', 'csv_escaper');

但是,我不确定将Timber与之配合使用时该如何做。我在Timber中找不到有关执行此操作的任何文档-如果不编辑核心文件,这是否可能?

2 个答案:

答案 0 :(得分:1)

documentation所示,您可以使用add_filter添加转义符,

add_filter( 'timber/twig', function( \Twig_Environment $twig ) {
    $twig->getExtension('Twig_Extension_Core')->setEscaper('csv', 'csv_escaper');
    return $twig;
} );

答案 1 :(得分:0)

尝试了DarkBee的答案后,我最终在一个类似的问题上发现了this answer,他们遇到了与我相同的错误,并且在使用以下代码后,自定义过滤器开始工作了:

add_filter('timber/twig', 'blm_add_twig_custom_filters');

function blm_add_twig_custom_filters($twig) {
    $twig->addExtension(new Twig_Extension_StringLoader());
    $twig->addFilter(new Twig_SimpleFilter('e2', 'escape_no_double'));
    return $twig;
}

/* Custom twig/timber escaper so it doesn't double encode html entities */

function escape_no_double($str) {
    return htmlspecialchars($str, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8', false);
}

可以找到更多here