Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 评估记录中的细枝功能_Php_Design Patterns_Twig_Bolt Cms - Fatal编程技术网

Php 评估记录中的细枝功能

Php 评估记录中的细枝功能,php,design-patterns,twig,bolt-cms,Php,Design Patterns,Twig,Bolt Cms,我创建了一个bolt扩展,它提供了一个新的twig函数foo。twig函数通过以下代码添加到twig框架$this->addTwigFunction('foo','twigFoo') public function twigFoo() { $markup = ' <hr> Foo <hr>'; return new \Twig_Markup($markup, 'UTF

我创建了一个bolt扩展,它提供了一个新的twig函数
foo
。twig函数通过以下代码添加到twig框架
$this->addTwigFunction('foo','twigFoo')

    public function twigFoo()
    {
        $markup = '
        <hr>
            Foo
        <hr>';

        return new \Twig_Markup($markup, 'UTF-8');
    }
公共函数twigFoo() { $markup=

”; 返回新的\Twig_标记($Markup,'UTF-8'); }
我的想法是cms的用户可以在内容类型中使用细枝功能。但是,当显示记录体时,细枝函数以普通HTML形式显示,例如:
{{foo}


我认为问题在于,细枝模板将在分配记录主体之前呈现。因此,我的记录主体将不会由twig进行评估。有人知道如何评估记录中使用的细枝功能吗?解决此问题的最佳做法是什么?

问题是Twig不会在Twig变量中呈现Twig。您可以创建一个转义函数来继续这样做。无论如何,这可能不是让你的CMS用户能够使用Twig的最好办法,因为这让他们能够完全访问你的代码。 无论如何,这里有一个转义函数可以帮助你

$this->app['twig']->getExtension('core')->setEscaper('code', function($twigEnv, $string, $charset) {
    $twig = clone $this->app['twig'];
    $twig->setLoader(new \Twig_Loader_String());
    return $twig->render($string);
}); 
然后可以在模板中使用细枝过滤器“代码”。e、 g:

{{ record.body|escape('code') }}
需要
allowtwig:true
中的字段告诉Bolt您相信字段/编辑器允许这样做,例如:

body:
  type: html
  allowtwig: true

谢谢还有一件事要做:扩展必须实现isSafe()函数并返回true,否则allowtwig标记不会对扩展中的细枝函数求值。