我正在寻找一种方法来利用twig模板的强大功能来生成XML文件,但是这个文件的内容非常庞大。我想避免将这个XML文件的内容放在内存中,所以目前它正在被生成时写入磁盘。
要使用其内容呈现twig模板,它需要传入内存中的完整数据结构。
有没有办法开始使用部分数据对twig模板渲染数据,以避免必须先将所有内容加载到内存中?
答案 0 :(得分:1)
好的,所以我相信我已经通过覆盖render()
文件中的Template.php
方法找到了解决方法。当前的render()方法使用ob_start()将缓冲的输出存储到内存,并在ini文件中配置内存限制。一旦超出该内存,您的输出将被转储到默认流,这可能导致部分数据。
通过扩展默认的Template类并覆盖render方法,您可以指定内存缓冲区存储的替代方法,例如php读写流(即php:// temp,php:// fd)。
现在,在实例化Twig_Environment
对象时,只需将新模板类传递到:
$twig = new Twig_Environment(
new Twig_Loader_String,
['base_template_class' => 'My_Twig_Template']
);