为从XML作为DOMDocument加载的模板文件运行PHP

时间:2018-09-06 17:03:21

标签: php xml model-view-controller xml-parsing html-parsing

我正在编写自己的小MVC框架,该框架基于layout.xml文件(指定要在何处加载哪些模板文件)加载模板文件。这样,可以通过XML和新的(phtml)模板文件轻松扩展或修改现有页面。

为此,我正在使用 DOMDocument 对象将模板文件加载到正确的HTML元素中。现在这可以正常工作,但是我刚刚意识到,模板文件的PHP内容在转换为DOMDocument时将被简单地解释为纯HTML。

如何正确处理此问题?我想我会使用 eval()从模板文件执行PHP,然后将结果HTML插入DOMDocument对象。但是,我宁愿避免使用 eval ,因为它的图像不好(危险且沉重?)。似乎正是我在寻找什么。

如果有人可以给我一些有关此问题的建议,将不胜感激。

1 个答案:

答案 0 :(得分:0)

我认为Twig将模板转换为PHP文件,然后运行PHP文件以生成输出,您可以执行类似的过程。这也允许您缓存生成的模板,这将减少解析时间。因此,您可以执行类似...的操作,而不是执行PHP的各个部分。

// Create temporary file (must have .php extension)
$fh = fopen ( "a.php", "w");
// Write out generated HTML
fwrite($fh, '<SomeTag>Content</SomeTag>'.PHP_EOL);
// Add in PHP code where necessary
fwrite($fh, '<?php'.PHP_EOL);
fwrite($fh, '$a="1";'.PHP_EOL);
fwrite($fh, 'echo $a;'.PHP_EOL);
fwrite($fh, '?>'.PHP_EOL);
fclose($fh);

// Run the generated file
require "a.php";

如果要捕获输出,请使用输出缓冲...

ob_start();
require "a.php";
$html = ob_get_clean();

echo $html;