如何以编程方式设置树枝块内容?

时间:2014-10-28 14:29:04

标签: php twig

是否可以从PHP代码设置twig模板块的值?我正在从不同的模板引擎迁移,我需要一个桥来设置块的值而不使用树枝模板。

在呈现模板之前,我只是希望分配纯文本。

1 个答案:

答案 0 :(得分:5)

如果你想在块中包含PHP文件,我建议你创建一个扩展名。

样品

的index.php

<?php

require(__DIR__ . '/../vendor/autoload.php');

$loader = new Twig_Loader_Filesystem('./');
$twig = new Twig_Environment($loader, array());

$function = new Twig_SimpleFunction('get_php_contents', function($file, $context) {
    ob_start();
    include($file); // $context is available in your php file
    return ob_get_clean();
}, array('is_safe' => array('html')));

$twig->addFunction($function);

echo $twig->render('test.twig', array('name' => 'Alain'));

test.twig

{% extends 'base.twig' %}

{% block content %}
{{ get_php_contents('contents.php', _context) }}
{% endblock %}

base.twig

<html>
    <div>I'm a base layout</div>
    {% block content %}{% endblock %}
</html>

contents.php

<?php

echo '<div style="color:red">';
echo "Hello {$context['name']}, it is now: ";
echo date("Y-m-d H:i:s");
echo '</div>';

结果

<html>
    <div>I'm a base layout</div>
    <div style="color:red">Hello Alain, it is now: 2014-10-28 19:23:23</div>
</html>