dongwei1921 2018-01-09 23:51
浏览 67

使用Twig多次渲染基本模板

I have a base template contains blocks which has to be filled by some render template's output. The problem is that when I pass $parameters to $template->render all twig variable display tags ({{ x }}) will be replaced with empty strings. So in next render call there is no block name to be replaced with a new render output.

basetemplate.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
     {{ Comments }}
</body>
</html>

comments.html:

<comment>
    My new Comment. Count is: {{ count }}
</comment>

View.php

class View
{
    protected static $content = "";

    public static function append($view = "basetemplate.html", $parameters = []){
        self::$content .= self::doRender($view, $parameters);
    }

    public static function getBufferedContent(){
        return self::$content;
    }

     public static function doRender($view, array $parameters = []){
        $twig = Engine::instance();
        $template = $twig->load($view);
        return $template->render($parameters);
    }

    public static function render($blockId, $view, $parameters = []){
        $twig = Engine::instance();
        $template = $twig->createTemplate(self::$content);
        $newTemplate = $template->render([$blockId => 
        self::doRender($view, $parameters)]);            
        self::$content = $newTemplate;
    }
}

Client.php:

View::append("basetemplate.html");
View::render("Comments", "comments.html", ["count" => 10]);
var_dump(View::geyBufferedContent());

Output:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

</body>
</html>

Expected output:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <comment>
        My new Comment. Count is: {{ count }}
        <!-- Expected rendered comments.html to be placed here-->
    </comment>
</body>
</html>

And Engine.php:

class Engine
{
    static private $twig;

    public static function instance()
    {
        static $twig = null;
        if(null == $twig){
            $loader = new Twig_Loader_Filesystem(TEMPLATE_ROOT);
            $twig = new Twig_Environment($loader, array(
                'cache' => APP_TEMPLATE_CACHE,
            ));
        }
        return $twig;
    }

    private function __construct()
    {
    }
}
  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
    • ¥15 C#调用python代码(python带有库)
    • ¥15 矩阵加法的规则是两个矩阵中对应位置的数的绝对值进行加和
    • ¥15 活动选择题。最多可以参加几个项目?
    • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
    • ¥15 vs2019中数据导出问题
    • ¥20 云服务Linux系统TCP-MSS值修改?
    • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
    • ¥20 怎么在stm32门禁成品上增加查询记录功能
    • ¥15 Source insight编写代码后使用CCS5.2版本import之后,代码跳到注释行里面